【问题标题】:Why can't I initialize std::vector with list-initialization为什么我不能用列表初始化来初始化 std::vector
【发布时间】:2013-01-04 09:34:38
【问题描述】:

为什么这不起作用?

#include <vector>

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

int main() {

   A a;

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

}

【问题讨论】:

  • 因为它无法从裸括号列表初始化器中派生类型信息。 a.f&lt;int&gt;({1,2,3}); 应该可以工作。

标签: c++ c++11


【解决方案1】:

可以使用列表初始化来初始化std::vector&lt;T&gt;。但是,您不能推断模板参数T 在参数列表中使用std::vector&lt;T&gt; 并向函数传递不是std::vector&lt;T&gt; 的东西。例如,这有效:

#include <vector>

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

int main() {

    A<int> a;

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 2022-06-10
    • 2012-05-17
    • 2020-05-14
    • 2021-03-19
    • 2012-02-13
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多