向量具有一个很好的显式构造函数,它允许用给定数量的给定值初始化向量,例如,对于一个向量的向量:
的std ::矢量< INT> v(16,0); // 16零英寸。一世 …
虽然存在一些冗余,但使用时没有任何概念上的错误
std::vector<int> v = std::vector<int>(16, 0);
运用
Foo() : v(16, 0) {}
同样好。
如果有多个构造函数,你肯定不想重复 v(16, 0) 参与每个构造函数。在这种情况下,使用委托构造函数是一种选择。如果没有更多的构造函数,我无法建议任何具体的东西。
v(16, 0)
您可以阅读有关委派构造函数的更多信息 http://www.stroustrup.com/C++11FAQ.html#delegating-ctor 。
直接支持成员变量的列表初始化语法的理由是什么,而不是正常的构造函数语法(例如A a(4,8)?我认为支持案例A没有问题,我发现它很直观。
虽然你的榜样很好,但想象一下
struct A {}; struct foo { A a(); };
什么是 a ?是初始化的函数还是默认值 A 。即使添加了一组规则,即一组空括号被认为是一个函数,我们也会遇到同样的问题
a
A
struct A {}; struct B {}; struct foo { A a(B()); };
如 a 可以是采用函数类型的函数,也可以是采用默认构造对象的变量。它也是 伤脑筋 弄清楚。
是否有比F更短/更简单的变体?
在C ++ 17中引入 类模板参数推导 你可以把初始化变成
std::vector<int> foo{std::vector(16, 0)}; // the 0 is used to deduce int for the vector in the braces
这是更短但我不确定它是否更清晰或任何更容易理解。