Questions tagged «aggregate-initialization»

6
在构造函数初始值设定项中初始化成员数组
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及其对数组的优越性,我很清楚。

3
什么时候私有构造函数不是私有构造函数?
假设我有一个类型,并且想将其默认构造函数设为私有。我写以下内容: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error C2248: 'C::C' cannot access private member declared in class 'C' (MSVC) auto c2 = C(); // …

8
缩小C ++ 0x中的转换。仅仅是我,还是听起来像是一个巨大的变化?
C ++ 0x将使下面的代码和类似的代码格式错误,因为它需要a到a的所谓缩小转换。doubleint int a[] = { 1.0 }; 我想知道在现实世界的代码中是否经常使用这种初始化。此更改将破坏多少代码?如果您的代码受到影响,是否需要花费很多精力在代码中进行修复? 供参考,请参阅n3225的8.5.4 / 6 缩小转换是隐式转换 从浮点类型到整数类型,或者 从long double到double或float,或者从double到float,除非源是一个常量表达式,并且转换后的实际值在可以表示的值范围内(即使不能准确表示),或者 从整数类型或非作用域枚举类型到浮点类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在转换回原始类型时会产生原始值,或者 从整数类型或无作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并在出现以下情况时产生原始值转换回原始类型。

5
是否可以防止省略聚合初始化成员?
我有一个结构,其中有许多相同类型的成员,像这样 struct VariablePointers { VariablePtr active; VariablePtr wasactive; VariablePtr filename; }; 问题是,如果我忘了初始化一个结构成员(例如wasactive),就像这样: VariablePointers{activePtr, filename} 编译器不会抱怨它,但是我将拥有一个部分初始化的对象。如何防止这种错误?我可以添加一个构造函数,但是它将重复两次变量列表,所以我必须键入所有这三次! 如果有针对C ++ 11的解决方案,请同时添加C ++ 11的答案(当前我仅限于该版本)。不过,也欢迎使用最新的语言标准!

4
隐藏空的基类以进行聚合初始化
考虑以下代码: struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } 这是初始化B的方式:B<int, 3> b = { {}, {1, 2, 3} }; 我想避免基类不必要的空{}。Jarod42 在此处提出了一个解决方案,但是,它不适用于元素默认初始化:B<int, 3> b = {1, 2, 3};很好,但B<int, 3> b = {1};不是:b.data[1]并且b.data[2]没有默认初始化为0,并且发生了编译器错误。有什么办法(或c ++ 20会有)从构造中“隐藏”基类?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.