问题标签 [list-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 投票
2 回答
533 浏览

c++ - g++ 4.4 中大括号初始化的替代方案

我想按如下方式初始化这个vector-of-vector-of-strings,用g++ 4.4.7编译(由于操作策略,我不能使用更新的版本。

用 编译g++ -std=gnu++0x,失败如下:

这个问题表明我的语法是正确的,但 g++ 4.4 没有正确或完全支持我正在尝试做的事情。

完成这个向量的向量初始化的简单后备方法是什么?

0 投票
1 回答
497 浏览

c++ - gcc 4.6和4.7之间的默认ctor差异

在 GCC 4.6.1 上,当我声明我自己的类型的实例时,该实例具有默认构造函数,并且如果我实例化该类型的对象并用大括号(如 Foo my_foo{}; )初始化它,则该类中的 POD 成员如果没有声明其他构造函数,则只会进行零初始化。如果除了默认构造函数之外没有其他构造函数,它们将像预期的那样初始化为零。

但是,在 GCC 4.7.3 上,零初始化以任何一种方式发生,这是我所期望的行为。

这里有什么区别?这是编译器错误吗?这两个 GCC 版本都支持 C++11 标准的默认构造函数。

没有必要坚持使用旧的 GCC 版本,但我想了解这里发生了什么。

注意:我默认主 ctor op=。并简单地复制ctor以保持类型可用于可变参数函数(clang要求将类分类为POD,尽管gcc让我摆脱使用可变参数函数的类型,即使使用用户定义的主ctor。如果你能告诉加分我为什么。)

这是一个示例程序来说明,包括底部的一些输出(来自使用两个 GCC 版本编译的二进制文件):

0 投票
1 回答
118 浏览

c++ - 聚合内标量的大括号初始化

知道这是有效的 c++11

这个有效吗?

GCC 给出一个错误,发出警告。

0 投票
2 回答
414 浏览

c++ - 使用大括号的 std::array 复制构造

为什么以下代码无法编译:

GCC 4.8.1 说

错误:无法在初始化中将“const std::array”转换为“long unsigned int”:i_{ a.i_}

0 投票
2 回答
1077 浏览

c++ - 哪些贪婪的初始化列表示例潜伏在标准库中?

自 C++11 起,标准库容器并std::string具有采用初始化列表的构造函数。此构造函数优先于其他构造函数(甚至,正如@JohannesSchaub-litb 在评论中指出的那样,甚至忽略其他“最佳匹配”标准)。()在将所有带括号形式的构造函数转换为其大括号版本时,这会导致一些众所周知的缺陷{}

我在这个网站上找不到第三个例子,这件事出现在 Lounge<C++> 聊天中(与@rightfold、@Abyx 和@JerryCoffin 讨论),有点令人惊讶的是转换std::string构造函数需要计数和一个要使用的字符{}而不是(),将其含义从n该字符的副本更改为n第 - 个字符(通常来自 ASCII 表),然后是另一个字符。

这没有被缩小转换的通常大括号禁止所捕获,因为 65 是一个常量表达式,可以表示为 char 并且在转换回 int 时将保留其原始值(第 8.5.4/7 节,第 4 条)(谢谢给@JerryCoffin)。

问题:标准库中是否还有更多示例,其中将()样式构造函数转换为{}样式,由初始化列表构造函数贪婪匹配?

0 投票
5 回答
135 浏览

c++ - 列表初始化结合构造函数

我有一个布局简单的结构,类似于:

我在所有地方都使用了统一初始化来创建我的结构,例如:

后来,我在 A 中添加了一个构造函数。它现在看起来像:

这打破了统一初始化的使用。有没有一种简单的方法可以再次进行这项工作。也许通过使用默认关键字?

我希望有一些简单的东西来匹配我的简单结构。

0 投票
2 回答
1427 浏览

c++ - 带大括号的 std::vector init 调用复制构造函数两次

为什么当我用大括号初始化 std::vector 时

编译器调用两次复制构造函数运算符?另一方面 - 使用 push_back 它只调用一次。

http://ideone.com/qcPG7X

0 投票
0 回答
249 浏览

c++ - 用大括号重新初始化 C++ 中的数组

我处于不断创建新变量并不是一个好选择的情况,因为我想避免为对象的每个实例创建一个新数组。本质上,我有一个“点”类和一个“多边形”类,其构造函数采用点向量。由于每个点都必须手动和单独设置,因为它们之间没有真正的数学级数,所以我想出的最保守的解决方案是使用我发现的“MakeVector”函数来转换直接数组到向量。

也就是说,要创建一个多边形,我有这个:

尽管这组特定的坐标具有数学级数,但并非所有人都如此,因为我正在做一些 3D 建模。以下几行无效并抛出错误:

我尝试了一些不同的方法,但我没有找到快速做到这一点的真正方法。我宁愿不必为我创建的数组中的每个值都换行。使用硬编码值的最佳方法是什么?

0 投票
1 回答
2511 浏览

c++ - 等号对大括号初始化有影响吗?例如。'T a = {}' 与'T a{}'

以下是在 C++11 中初始化变量的两种方法:

我在我能想到的所有情况下都测试了这两个,但我没有注意到有什么不同。这个答案表明两者之间存在细微差别:

对于变量,我不太注意T t = { init };orT t { init };样式之间的差异,我发现差异很小,最坏的情况只会导致关于滥用显式构造函数的有用编译器消息。

那么,这两者有什么区别吗?

0 投票
1 回答
1671 浏览

c++ - 为什么 Clang 和 VS2013 接受移动大括号初始化的默认参数,但不接受 GCC 4.8 或 4.9?

就像标题所暗示的那样,我有一个简短的演示程序,可以使用所有这些编译器进行编译,但是在使用 gcc 4.8 和 gcc 4.9 编译后运行核心转储:

关于为什么的任何想法?

我的编译设置:

这是来自 GDB 的回溯:

*** error for object 0x1003038a0: pointer being freed was not allocated ***