C ++初始化引用变量

时间:2016-11-26 16:27:33

标签: c++ pointers reference

我今天在我的代码中发现了一个“错误”...但我不确定“错误”是否真的改变了生成的编译代码。

考虑初始化对doublex的以下引用。

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的大对象的引用。

引用变量的原因是它们在算法中使用,变量名称​​非常长,因此我使用引用为这些变量创建了短路别名。希望我这样做是有道理的......

所以,我已“纠正”了“错误”,但我的输出编译代码实际上已经改变了吗?

1 个答案:

答案 0 :(得分:0)

他们都是list initialization。对于你的情况:

double &x={*_data->x_double};

是:

  

6)使用braced-init-list初始化命名变量   等于标志

double &x{*_data->x_double};

是:

  

1)使用braced-init-list初始化命名变量(即   是,一个可能是空的括号括起来的表达式列表或嵌套   支撑-INIT-列表)

在这种情况下它们的效果完全相同。