簡體   English   中英

C ++初始化引用變量

[英]C++ initialization of reference variable

我今天在我的代碼中發現了一個“錯誤”...但我不確定“錯誤”是否實際上改變了生成的編譯代碼。

考慮將以下引用初始化為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

引用變量的原因是它們在算法中使用,並且變量名稱非常長,因此我使用引用為這些變量創建了短路別名。 希望我為什么這樣做是有道理的...

所以,我“糾正”了“錯誤”,但我的輸出編譯代碼實際上已經改變了嗎?

它們都是列表初始化 對於您的情況:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM