gpt4 book ai didi

c++ - 成员初始化列表符号 : curly braces vs parentheses

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:26 25 4
gpt4 key购买 nike

考虑 pg 中的以下代码片段。 17 的 C++ 之旅:

class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { } //construct a Vector
double& operator[](int i) { return elem[i]; } //element access: subscripting
int size() { return sz; }
private:
double* elem; // pointer to the elements
int sz; // the number of elements
};

这里我关心的是第三行的成员初始化列表,其中 Stroustrup 将冒号与两个初始化语句 elem{new double[s]} 分开和 sz{s}

问题:为什么他在这里使用花括号(即 {..})来制作这两个初始化语句?我在网络上的其他地方看到人们用括号制作初始化列表,这样这也可以(AFAIK)合法地读取 elem(new double[s])sz(s)。那么这两种表示法之间是否存在语义差异?是否有其他方法可以初始化这些变量(在初始化列表的上下文中)?

最佳答案

表格

Vector(int s) :elem(new double[s]), sz(s) { }

在所有版本的 C++ 中都是正确的。带大括号的,比如

Vector(int s) :elem{new double[s]}, sz{s} { }

于 2011 年引入 C++ 标准,在旧标准中无效。

在您询问的上下文中,没有区别。但是,还有其他语言和库功能(也引入了 2011 标准)依赖于第二种形式而不适用于第一种形式。

没有其他方法可以在构造函数的初始化列表中初始化基类成员。可以对构造函数主体中的成员进行赋值,但这不是初始化语法。

关于c++ - 成员初始化列表符号 : curly braces vs parentheses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36212837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com