问题标签 [member-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 回答
311 浏览

c++11 - 匿名结构中的 Brace-or-equal-initializers 在 VS2013 上不起作用

结构中的匿名结构中的大括号或相等初始化器不会对 VS2013 生成的输出执行其工作。有代码:

在 Linux 上使用以下命令编译:

(添加优化标志不影响结果)

预期结果:

奇怪的。用 VS2013 运行它会给出垃圾值。在实现 C++11 标准方面谁是正确的?我高度怀疑这是 GCC 的错。

是否与一些无用的 VS 编译器选项有关?Windows 扩展?由于 MS 的错误,我必须为结构创建默认构造函数?这是荒谬的。

0 投票
1 回答
146 浏览

c++ - 常量变量初始化仅适用于成员初始化列表

考虑代码片段

为什么内联成员初始化列表有效,而普通初始化无效?

0 投票
2 回答
71 浏览

c++ - 在构造函数中组织初始化列表的更好方法

有时需要在初始化const成员或没有默认构造函数的成员之前对类构造函数参数进行一些处理。

例如,在Java中我可以这样做(不要问为什么,这只是一个例子):

在 C++ 中,看起来像

随着越来越多的成员需要复杂的初始化,初始化列表变得越来越可怕。有没有办法解决这个问题?

UPD 1:
如果成员没有复制构造函数怎么办?只需像示例中那样为函数的每个参数提取计算吗?

0 投票
1 回答
91 浏览

c++ - 在 C++ Primer 的构造函数中,成员的初始值(如 'contents(ht * wd, c)')如何工作?

我读过《C++ Primer》这本书。在第 7.3.1 节:有一个Screen类的构造函数:

在重载的构造函数中:

它的初始值是contents(ht * wd, c)多少以及它是如何工作的?
在第 7.1.4 节中,有规定:

构造函数初始值设定项是成员名称列表,每个成员名称后跟括号中(或花括号内)该成员的初始值。

而且我知道string有一种方法string s(n, 'c')可以初始化一个字符串,例如string s(10, 'c').
但是如何在string构造函数成员初始化中利用构造函数呢?
提前致谢。

0 投票
3 回答
183 浏览

c++ - 成员初始化器的顺序

下面的代码给出了正确的输出,如果我声明变量ij,就像int i, j;

但是如果我声明变量iand j,就像int j, i;. 然后j打印垃圾值

那么,它是否取决于变量声明的顺序?

0 投票
0 回答
43 浏览

c++ - 在初始化列表中使用成员函数是好还是坏?

如果我有一个类将初始化一个成员值,这种方式不足以直接在初始化器列表中执行,那么初始化该成员变量的正确方法是什么?

显然,在这种情况下,初始化 Rectangle 的区域是微不足道的,可以内联完成,但我们假设情况并非如此,而 init_area() 做了一些更复杂的事情。

以这种方式初始化成员是标准做法吗?如果是这样,我似乎无法在文学作品中经常使用它(例如前一百页的 cppcoreguidelines)。

如果这不是好的做法,请您详细说明替代方法以及上述方法是否存在缺陷?

0 投票
3 回答
673 浏览

c++ - 如果有默认成员初始化,为什么要使用成员初始化列表

在 C++11 中,引入了默认成员初始化。所以,我只是想问一下,为什么仍然必须使用成员初始值设定项列表来支持这些?

例如

如果这是允许的

为什么要使用这个

有什么特别的优势吗?

0 投票
2 回答
304 浏览

c++ - 微不足道的默认构造函数应该在这里尊重默认成员初始化器吗?

考虑代码:

请注意,尽管stru具有默认成员初始值设定项,但自 C++14 起,它仍然可以作为聚合类型。std::atomic有一个简单的默认构造函数。根据标准,是否应该将 的成员as初始化为零?clang 6.0.0 没有这样做(参见此处),而 gcc 7.2.0 似乎如此(参见此处)。

0 投票
1 回答
270 浏览

c++ - 隐式声明的默认构造函数采用什么形式?

所以假设我正在使用这个玩具示例:

我知道默认构造函数不会默认初始化member。因此,如果我这样做,member仍然未初始化:const Foo implicit_construction. 顺便说一句,这似乎工作正常:const Foo value_initialization = Foo()尽管我的理解是这实际上并没有使用默认构造函数。

如果我Foo这样改变:

我尝试这样做const Foo defaulted_construction,不出所料,它的行为implicit_constructionmember未初始化完全一样。

最后,如果我改成Foo这样:

我这样做:const Foo defined_construction member 零初始化的。我只是想弄清楚隐式定义的构造函数是什么样的。我本来会的Foo(){}。不是这样吗?是否还有其他一些黑魔法在起作用,使我定义的构造函数的行为与默认构造函数不同?


编辑:

也许我在这里被误导了。defaulted_construction肯定是未初始化的。
虽然defined_construction肯定是初始化的。

我认为这是标准化的行为,这是不正确的吗?

0 投票
1 回答
106 浏览

c++ - 统一初始化语法的使用

如果我有课

这两种初始化成员的方法有什么区别

我在一次代码审查中被告知要使用统一初始化语法,即大括号初始化。在这种情况下有区别吗?或者它只是一种风格偏好?