我今天在我的代码中发现了一个“错误”...但我不确定“错误”是否真的改变了生成的编译代码。
考虑初始化对double
,x
的以下引用。
double &x{*_data->x_double}; // x_double is a member variable of the struct
// _data, it is a pointer to another double
// eg, I have this somewhere else...
struct data
{
double *x_double;
};
data *_data = new data; // edit: duh, this has to be a pointer...
double another_x = 10.0;
_data->x_double = &another_x; // edit: pointer here too!
但是我做了以下“错误”...(注意额外的=
标志)
double &x={*_data->x_double};
此代码是从我的实际代码复制的最小示例,其中我没有对双精度的引用,而是对std::vector
的大对象的引用。
引用变量的原因是它们在算法中使用,变量名称非常长,因此我使用引用为这些变量创建了短路别名。希望我这样做是有道理的......
所以,我已“纠正”了“错误”,但我的输出编译代码实际上已经改变了吗?
答案 0 :(得分:0)
他们都是list initialization。对于你的情况:
double &x={*_data->x_double};
是:
6)使用braced-init-list初始化命名变量 等于标志
和
double &x{*_data->x_double};
是:
1)使用braced-init-list初始化命名变量(即 是,一个可能是空的括号括起来的表达式列表或嵌套 支撑-INIT-列表)
在这种情况下它们的效果完全相同。