为什么我不能使用列表初始化来初始化std::vector?

6
为什么这不能正常工作?
#include <vector>

struct A {
   template <typename T> void f(const std::vector<T> &) {}
};

int main() {

   A a;

   a.f({ 1, 2, 3 });

}

8
由于无法从裸大括号列表初始化器中推导出类型信息。a.f<int>({1,2,3}); 应该是可行的。 - jogojapan
1个回答

13

您可以使用列表初始化来初始化std::vector<T>。但是,如果在参数列表中使用std::vector<T>并将函数传递给不是std::vector<T>的内容,则无法推断模板参数T。例如,以下内容有效:

#include <vector>

template <typename T>
struct A {
   void f(const std::vector<T> &) {}
};

int main() {

    A<int> a;

   a.f({ 1, 2, 3 });

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接