Tag: 初始化程序列表

将vector<T>转换为initializer_list <T>

每个人都从std::initializer_list创buildstd::vector ,但是std::initializer_list呢? 例如。 如果你使用std::initializer_list作为参数: void someThing(std::initializer_list<int> items) { … } 有些时候,你有你的项目在一个vector<T>而不是一个文字列表: std::vector<int> v; // populate v with values someThing(v); // boom! No viable conversion etc. 更一般的问题是:如何从STL迭代中创build一个stl::initializer_list ,而不仅仅是std::vector 。

为什么初始化程序列表中的元素数量会导致模糊的调用错误?

为什么前两个调用做编译器的某些doSomething ,但在列表中使用两个元素会导致模糊的调用? #include <vector> #include <string> void doSomething(const std::vector<std::string>& data) {} void doSomething(const std::vector<int>& data) {} int main(int argc, char *argv[]) { doSomething({"hello"}); // OK doSomething({"hello", "stack", "overflow"}); // OK doSomething({"hello", "stack"}); // C2668 'doSomething': ambiguous call return 0; }

什么是一个std :: map扩展初始化列表看起来像?

如果它甚至存在,一个std::map扩展初始化器列表是什么样的? 我已经尝试过一些…的组合,所有我能想到的与GCC 4.4,但没有发现任何编译。

为什么我的模板不能接受一个初始化列表

我已经创build了一个模板如下 template<typename T> void f(T const& t) { } 我希望这可以通过容器来调用,也可以通过初始化器列表调用。 我认为这将是initializer_list<int> ,当调用如下。 f({1, 2, 3}); 但GCCperformance得好像不符合标准 m.cpp: In function 'int main()': m.cpp:6:25: warning: deducing 'const T' as 'const std::initializer_list<int>' m.cpp:4:6: warning: in call to 'void f(const T&) [with T = std::initializer_list<int>]' m.cpp:6:25: warning: (you can disable this with -fno-deduce-init-list) 任何人都可以解释我怎样才能使这项工作没有任何警告? 谢谢!

括号内的初始化列表构造函数

我有以下构造函数的类Phenotype: Phenotype(uint8 init[NUM_ITEMS]); 我可以像这样创build一个表型: uint8 data[] = {0,0,0,0,0}; Phenotype p(data); 但是当我尝试创build一个像这样的时候,我得到一个错误: Phenotype p = {0,0,0,0,0}; 输出: $ make g++ -Wall -g main.cpp -std=c++0x main.cpp: In function 'int main(int, char**)': main.cpp:109: error: no matching function for call to 'Phenotype::Phenotype(<brace-enclosed initializer list>)' main.cpp:37: note: candidates are: Phenotype::Phenotype(uint8*) 该错误似乎表明有一种方法来定义一个构造函数,该构造函数接受一个大括号包含的初始化程序列表。 有谁知道这可能会怎么做?

C ++ 11初始化程序列表失败 – 但仅限于长度为2的列表

我跟踪了一个模糊的日志logging错误,因为长度为2的初始化列表似乎是一个特例! 这怎么可能? 使用CXXFLAGS=-std=c++11 -stdlib=libc++ ,使用Apple LLVM版本5.1(clang-503.0.40) CXXFLAGS=-std=c++11 -stdlib=libc++ 。 #include <stdio.h> #include <string> #include <vector> using namespace std; typedef vector<string> Strings; void print(string const& s) { printf(s.c_str()); printf("\n"); } void print(Strings const& ss, string const& name) { print("Test " + name); print("Number of strings: " + to_string(ss.size())); for (auto& s: ss) { auto t = […]

何时使用大括号初始化程序?

在C ++ 11中,我们有了初始化类的新语法,这给我们提供了大量的如何初始化variables的可能性。 { // Example 1 int b(1); int a{1}; int c = 1; int d = {1}; } { // Example 2 std::complex<double> b(3,4); std::complex<double> a{3,4}; std::complex<double> c = {3,4}; auto d = std::complex<double>(3,4); auto e = std::complex<double>{3,4}; } { // Example 3 std::string a(3,'x'); std::string b{3,'x'}; // oops } { // Example […]

初始化程序列表中有多个突变是未定义的行为?

我很好奇初始化列表和序列点。 我刚才读到,初始化列表中的评估顺序是左alignment的。 如果那样的话,评价点之间肯定有某种顺序点,我错了吗? 所以说这是以下有效的代码? 有没有什么会导致未定义的行为? int i = 0; struct S { S(…) {} operator int() { return i; } }; int main() { i = S{++i, ++i}; } 任何和所有的回应表示赞赏。

在构造函数初始值设定项中初始化成员数组

class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; 我相信原因是数组只能用=语法来初始化,即: int arr[3] = {1,3,4}; 问题 我怎么做我想做的事(即,在构造函数中初始化一个数组(不分配正文中的元素))。 这甚至有可能吗? C ++ 03标准对ctor初始值设定项中的聚合(包括数组)初始化有什么特别之处吗? 或者上述代码的无效是其他规则的必然结果吗? C ++ 0x初始化列表是否解决了这个问题? PS请不要提及向量,boost :: arrays以及它们对数组的优越性,我很清楚它们。

C ++成员初始化列表

请解释如何使用成员初始化列表。 我有一个.h文件和.cpp文件中声明的类,如下所示: class Example { private: int m_top; const int m_size; … public: Example ( int size, int grow_by = 1 ) : m_size(5), m_top(-1); … ~Example(); }; 我正在初始化由于const对象创buildm_size 。 我应该如何编写构造函数? 我应该重复: m_size(5), m_top(-1) ,或者我可以省略这一步? Example::Example( int size, int grow_by) { … some code here } 要么 Example::Example( int size, int grow_by) : m_size(5), m_top(-1) […]