问题标签 [aggregate-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
511 浏览

c++ - 逐字段构造函数生成的规则是什么?

我发现对类使用初始化列表语法的可能性取决于类字段是否具有默认值。为什么?

准确地说,考虑以下代码:

它编译没有任何问题。但是,如果我向类字段添加默认值,它将停止构建:

错误 1 ​​错误 C2440:“正在初始化”:无法从“初始化器列表”转换为“S”

为什么?还有什么影响这种构造函数的生成?

0 投票
2 回答
119 浏览

c++ - 如何让我的向量类支持直接初始化/赋值

我的问题肯定很愚蠢,但我对 C++11 和模板编程的理解有很多漏洞,我不知道如何解决这个问题。

我正在滚动我自己的非常简单的线性代数库:

我只是希望它支持一种直接分配(或至少初始化)向量(即具有单维数的矩阵)的方法。例如,我希望能够做到v = col2d(v1,v2)或至少能够做到col2d v = {v1,v2}。我的印象是buf公开可能允许col2d v = {{v1, v2}},但我不喜欢公开的想法buf。我并不热衷于为每个 (1,N) 和每个 (M,1) 编写一个专门的构造函数。我试图使图书馆尽可能简单易读。

有什么建议吗?

0 投票
1 回答
193 浏览

c++ - 初始化中的评估顺序

在以下程序中:

输出是

来自 http://ideone.com/1ueWdK和 clang3.7

但结果是:

http://rextester.com/l/cpp_online_compiler_clang上也有 clang 3.7。

在我自己的 ubuntu 上,gcc 6.2 在结构上给出了内部编译器错误int aa[3][3] = {aa[2][2] = 1}

我假设这是未定义的行为,但在标准中找不到明确的声明。

问题是:

评估顺序是否对初始化列表中的赋值(例如a[2] = 1)和标准中定义的数组的实际元素(例如)的初始化产生影响a[2]

它被明确声明为已定义或未定义?或者它是否因为没有明确定义而变得未定义?

或者由于评估顺序之外的其他原因,构造是否具有已定义或未定义的行为?

0 投票
4 回答
237 浏览

c++ - struct Data d = {0} 和 struct Data d = {} 之间有什么区别吗

我的代码中有两种类型的结构变量初始化。

例子

我正在运行代码广告,得到 0 0 0 0 作为我的输出。请帮助我,这两种初始化之间有什么区别。

0 投票
0 回答
39 浏览

c++ - 元素的初始化是初始化子句的副作用吗?

在 N4606 的第 8.6.4p4 段中我们有:

花括号初始化列表的初始化列表中初始化子句 ...,按照它们出现的顺序进行评估。也就是说,与给定初始化子句相关联的每个值计算和副作用在初始化器列表的逗号分隔列表中与任何初始化子句相关联的每个值计算和副作用之前进行排序。

在这个程序中:

很明显,accumulate在表达式之后计算++i,并且副作用++i是有序且明确定义的。但是数组元素的初始化是否也是初始化子句++i的副作用?是读出值 1、2 和 3,还是可能访问未初始化的值?accumulate

0 投票
1 回答
768 浏览

c++ - c++17 聚合初始化

我正在观看 Jason Tuner 在 youtube 上的一个视频系列,以及在此处找到的这个特定视频:Aggregate Initializations他从使用 clang++ c++03 开始​​,然后将编译器更改为 clang++ c++11,然后当他合并基类层次结构时,他更改了它使用 c++17 或 c++1z 使用最新版本的 clang++。

我最近刚刚下载并安装了 MSVS2017RC,我在 Intel Quad Core Extreme 上运行 Windows 7 64bit SP1。

但是,当我在 IDE 中尝试关注他的视频时

我收到此编译器错误:

Visual Studio 2017 是否支持 c++17 中的这些功能?如果是这样,是否需要在项目属性中设置特殊的编译器选项?或者这目前是 clang 或 gcc 独有的?C2440如果这应该是 c++17 编译器,MS 编译器错误的主要原因是什么?

0 投票
2 回答
316 浏览

c++ - 如何制作嵌套聚合初始化程序?

我有如下代码

我认为这是一个嵌套聚合初始化,但为什么不工作?以及如何a = {{1,2},{3,4}}通过更改代码来工作?

找路工作

不知道为什么?

0 投票
2 回答
1001 浏览

c++ - c++ - 使用聚合初始化来初始化数组成员

使用此代码:

我可以使用聚合初始化Structure的值进行a初始化吗? 我试过了,但这给了我错误b
Structure{a, b}cannot initialize an array element of type 'char' with an lvalue of type 'char [4]'

0 投票
1 回答
115 浏览

c++ - 重构期间结构的聚合初始化是否安全?

如果我有一个结构

我在某处初始化它

那么如果我将结构重新排序为

因为现在SomeStruct s{1,2}意味着 x=1, y=2, z=0

编辑:提出的一个论点是构造函数具有相同的问题,这是真的,但是您通常可以在那里看到参数名称和顺序 - 如果使用任何现代 IDE,则更清楚。

我从未见过有人提到过这一点,但似乎只有在确定永远不会更改数据布局的情况下才能安全地使用这样的聚合初始化。那将是罕见的情况,那么是否有“永远不要在非同质结构上使用聚合初始化”的潜规则?

0 投票
2 回答
235 浏览

c++ - 结构的聚合初始化,使用它自己的数据成员

这是关于此的第 n 个问题,但我找不到完全相同的重复项...

假设以下代码:

这样初始化s.y可以吗?(只有 JetBrains 的 ReSharper 通过以下方式抱怨它:)Object member this->s.x might not be initialized

如果有人用标准的引用来确认他们的答案,那就太好了。