问题标签 [initialization-list]

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 投票
9 回答
56669 浏览

c++ - C++ 构造函数名称后面的冒号有什么作用?

冒号运算符 (":") 在这个构造函数中做了什么?是否相当于MyClass(m_classID = -1, m_userdata = 0);

0 投票
16 回答
45774 浏览

python - 自动初始化实例变量?

我有一个看起来像这样的python类:

其次是:

有没有办法自动初始化这些实例变量,比如 C++ 的初始化列表?它将节省大量冗余代码。

0 投票
3 回答
2053 浏览

c++ - C++ 初始化列表和内存分配

以下内容有效吗?

我是否正确地假设初始化将完全按照我在 ctor 中给出的顺序发生?如果不是,如果 m_nDataLength 的初始化发生在 m_pData 之后怎么办?

0 投票
5 回答
20298 浏览

c++ - 初始化列表的好处

我知道使用初始化列表的好处是它们在初始化非内置类成员时提供了效率。例如,

Fred::Fred() : x_(whatever) { }

更可取的是,

Fred::Fred() { x_ = whatever; }

如果 x 是自定义类的对象。除此之外,为了保持一致性,这种风格甚至与内置类型一起使用。

这样做最常见的好处是提高了性能。如果表达式whatever 与成员变量x_ 的类型相同,则whatever 表达式的结果直接在x_ 内部构造——编译器不会制作对象的单独副本。

对于另一种风格,表达式whatever 会导致创建一个单独的临时对象,并且这个临时对象被传递给x_ 对象的赋值运算符。然后该临时对象在 ; 处被破坏。那是低效的。

问题
在以下示例中使用初始化列表是否有任何效率提升。我认为没有收获。第一个版本调用字符串的复制构造函数,另一个调用字符串的赋值运算符(没有创建任何临时的)。对吗?

0 投票
5 回答
54354 浏览

c++ - 使用初始化列表初始化父级的受保护成员 (C++)

是否可以使用子类的构造函数的初始化列表来初始化在父类中声明为受保护的数据成员?我无法让它工作。我可以解决它,但如果我不必这样做会很好。

一些示例代码:

当我尝试这个时,编译器告诉我:“类'Child'没有任何名为'something'的字段”。这样的事情可能吗?如果是这样,语法是什么?

非常感谢!

0 投票
4 回答
4567 浏览

c++ - 如何在初始化列表中捕获异常?

我有一个关于如何在初始化列表中捕获异常的问题。

例如,我们有一个从 Bar 派生的类 Foo

0 投票
5 回答
6681 浏览

c++ - C++ 构造函数初始化列表异常

在编写类时,我一直是个好孩子,所有成员变量都以 m_ 为前缀:

然而,最近我忘了这样做,最后写了:

信不信由你,编译的代码没有错误/警告,并且分配正确进行!只有在签入代码之前进行最后检查时,我才意识到自己做了什么。

我的问题是:为什么我的代码会编译?C++ 标准中是否允许这样的事情,还是仅仅是编译器聪明的一个例子?如果您想知道,我使用的是 Visual Studio 2008

0 投票
3 回答
414 浏览

c++ - 构造函数初始化列表:来自 C++ Primer 第 16 章的代码

在“C++ Primer”的第 16 章快结束时,我遇到了以下代码(我删除了很多行):

我的问题是Sales_item(): h() { }线路。

为了完整起见,我还要引用我认为与我的问题相关的 Handle 类模板的部分(我认为我不需要显示 Item_base 类):

我本来期望像这样的:

a)Sales_item(): h(0) { }这是作者在前几章中反复使用的约定,或

b)Handle<Item_base>()如果意图是调用 Handle 类的默认构造函数。

相反,这本书的内容是Sales_item(): h() { }. 我的直觉反应是这是一个错字,因为 h() 看起来与函数声明非常相似。另一方面,我只是尝试在 g++ 下编译并运行使用此类的示例代码,它似乎工作正常。有什么想法吗?

编辑:所有好的答案,谢谢!在中间的 30 分钟内,我找到了同一本书第 12 章的相关引用:“当我们初始化类类型的成员时,我们正在指定要传递给该成员类型的构造函数之一的参数。我们可以使用该类型的任何构造函数。” 正如你们都指出的那样,在这种情况下,我们传递的参数为零。

0 投票
7 回答
32182 浏览

c++ - C ++:将成员指针初始化为null?

我有一个看起来像这样的课程:

我希望初始化barNULL. 这是最好的方法吗?

另外,析构函数是否必须是虚拟的?(如果这是真的,那么构造函数也必须是虚拟的吗?)

0 投票
4 回答
6053 浏览

c++ - 用 C++ 编写原型构造函数

我采用二次表达式,其中y=ax^2 + bx + cwith a, b,c是常量并且x是变量。这是我的课:

我将为该类创建两个构造函数,以便以下内容合法

默认构造函数应设置为零,而第二个构造函数中的参数指示系数的初始值。

以下是我认为我应该这样做的方式:

但是,我并不完全了解如何设置它,并希望任何专家帮助解决这个问题。