Geo*_*rge 5 c++ initialization initializer-list
考虑以下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
};
Run Code Online (Sandbox Code Playgroud)
在这里,我关注第三行的成员初始化器列表,其中Stroustrup将冒号与两个初始化器语句elem{new double[s]}和分隔开sz{s}。
问题:为什么他在这里使用方括号(即{..})来编写这两个初始化程序语句?我在网络上的其他地方看到过人们用括号括起初始化列表,这样(AFAIK)也可以合法地阅读elem(new double[s])和sz(s)。那么这两种表示法在语义上有区别吗?还有其他方法可以初始化这些变量(在初始化列表的上下文中)吗?
表格
Vector(int s) :elem(new double[s]), sz(s) { }
Run Code Online (Sandbox Code Playgroud)
在所有版本的 C++ 中都是正确的。带花括号的那个,比如
Vector(int s) :elem{new double[s]}, sz{s} { }
Run Code Online (Sandbox Code Playgroud)
于 2011 年引入 C++ 标准,在旧标准中无效。
在您询问的上下文中,没有区别。但是,2011 标准中也引入了其他语言和库功能,它们依赖于第二种形式并且不适用于第一种形式。
没有其他方法可以在构造函数的初始化列表中初始化基类成员。可以分配给构造函数体中的成员,但这不是初始化语法。
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |