aggregate-initialization相关内容

具有非静态成员初始值设定项的类的 C++11 聚合初始化

标准中是否允许: 结构体A{int a = 3;整数 b = 3;};一个{0,1};//??? 这个类还聚合吗?clang 接受此代码,但 gcc 不接受. 解决方案 在 C++11 中,具有类内成员初始值设定项使结构/类不是聚合 —然而,这在 C++14 中有所改变.当我第一次遇到它时,我发现这是令人惊讶的,这种限制的基本原理是类内初始化器与用户定义的构造器非常相似,但反论点是没有 ..
发布时间:2021-12-18 22:35:11 C/C++开发

我可以引用初始值设定项列表的先前成员吗?

假设我想引用我已经定义的 initializer_list 的成员.我可以吗? 此代码在 Visual Studio 和 gcc 中编译并给出预期值:“13 55",我会只是想知道这是合法的: const int foo[2] = {13, foo[0] + 42}; 解决方案 所以我们这里有 C++ 标准草案的 8.5.1 部分涵盖的聚合初始化,它说: 聚合是数组或类 [... ..

使用聚合初始化时,是否可以在地图中进行无复制放置?

有关如何插入而不复制地图值. std :: map放置而不复制值 从该答案继续-假设我的 Foo 类型看起来像这样: struct Foo {const int&intref_;std :: mutex Mutex_;} 然后使用像这样的聚合初始化来初始化 Foo {7} 或 Foo {7,std :: mutex()} 以某种方式可以将其放置到地图中吗?: ..

是否可以防止省略聚合初始化成员?

我有一个结构,其中有许多相同类型的成员,像这样 struct VariablePointers {VariablePtr有效;VariablePtr处于活动状态;VariablePtr文件名;}; 问题是,如果我忘记初始化一个结构成员(例如 wasactive ),就像这样: VariablePointers {activePtr,文件名} 编译器不会抱怨它,但是我将有一个部分初始 ..
发布时间:2021-04-19 20:56:56 C/C++开发

在聚合初始化列表的给定位置中,传递给先前位置的值是否可以安全地从相应成员中读取?

结构{int a,b;} s = {5,s.a + 1}; 根据标准,在上面的示例中读取"s.a"是否安全,以便将s初始化为a = 5和b = 6?如果是这样,大多数编译器是否遵守此规则? (以上内容在VC10中进行编译.) 解决方案 是的,因为聚合成员初始化是按顺序进行的. [dcl.init.aggr] /2具有: 按8.5.4中的初始化器列表初始化聚合时,初始化 ..
发布时间:2021-04-19 18:58:31 C/C++开发

C ++ 20从带括号的值列表初始化聚合,不支持内部数组

C ++ 20采用了 p0960 -允许从带括号的值列表中初始化聚合。 确切的用词( [dcl.init] 17.6.2.2 )说: [...]构造函数是可行的,目标类型是聚合的 类,初始化程序是带括号的表达式列表, 对象的初始化如下。 让e 1 ,...,e n 成为合计([dcl.init.aggr])中的元素 。 让x 1 ,…,x k 成为表达式列表的元素。 ..
发布时间:2020-09-28 03:00:22 C/C++开发

缩小C ++ 0x中的转换。仅仅是我,还是听起来像是一个巨大的变化?

C ++ 0x将使以下代码和类似代码格式错误,因为它需要 double narrowing conversion $ c>到 int 。 int a [] = {1.0}; 我想知道这种初始化在现实世界的代码中是否被大量使用。此更改将破坏多少代码?如果您的代码受到影响,是否需要花费很多精力在代码中进行修复? 作为参考,请参见8.5。 n3225的.4 ..
发布时间:2020-09-26 21:25:52 C/C++开发

通过显式构造函数初始化数组

我正在编写一个类,该类具有带const char*参数的显式构造函数.出于这个问题的意图和目的,它看起来像这样: struct Symbol { Symbol()=default; explicit Symbol(const char*); }; 现在,出于文档目的,我想编写一个示例来初始化数组(array/vector/list-我不在乎确切的类型),并且我需要使示例尽 ..

C ++中的汇总初始化安全性

假设我具有以下结构: struct sampleData { int x; int y; }; 使用时,我想初始化 sampleData 类型为已知状态。 sampleData样本= {1,2} 后来,我决定需要存储在 sampleData 结构中的其他数据,如下所示: struct sampleData { int ..
发布时间:2020-06-01 20:19:38 C/C++开发

我可以引用初始化列表的先前成员吗?

说我想引用我已经定义的initializer_list的成员.我可以吗? 此代码编译并给出预期的结果:我在Visual Studio和 gcc 中均给出了"13 55"只是想知道这是合法的: const int foo[2] = {13, foo[0] + 42}; 解决方案 所以我们这里是C ++标准草案的8.5.1部分所涉及的聚合初始化,它说: 集合是数组或类[...] ..