为什么我不能用list-initialization初始化std :: vector

时间:2012-12-30 02:03:33

标签: c++ c++11

为什么这不起作用?

#include <vector>

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

int main() {

   A a;

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

}

1 个答案:

答案 0 :(得分:13)

可以使用列表初始化初始化std::vector<T>。但是,您不能使用参数列表中的T 推断模板参数std::vector<T>,并将函数传递给非std::vector<T>的函数。例如,这有效:

#include <vector>

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

int main() {

    A<int> a;

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

}