[英]C++ initialization of reference variable
我今天在我的代碼中發現了一個“錯誤”...但我不確定“錯誤”是否實際上改變了生成的編譯代碼。
考慮將以下引用初始化為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
。
引用變量的原因是它們在算法中使用,並且變量名稱非常長,因此我使用引用為這些變量創建了短路別名。 希望我為什么這樣做是有道理的...
所以,我“糾正”了“錯誤”,但我的輸出編譯代碼實際上已經改變了嗎?
它們都是列表初始化 。 對於您的情況:
double &x={*_data->x_double};
是:
6)在等號后用braced-init-list初始化命名變量
和
double &x{*_data->x_double};
是:
1)使用braced-init-list初始化一個命名變量(也就是說,一個可能為空的大括號括起來的表達式列表或嵌套的braced-init-lists)
在這種情況下,它們的效果完全相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.