2015-11-17 80 views
0

以下兩者有什麼區別嗎?有本地變量參考的C++

const int64 x = some_struct.x; 

const int64& x = some_struct.x; 

一個比另一個更好嗎?我最近看到這個引用被用在某處,但不明白爲什麼有人會這麼做。

+0

@JamesRoot你爲什麼要把它標記爲重複?我的問題主要在於如果參考對POD有任何意義。我四處搜尋,找不到任何問題。如果您發現某些內容,請將其張貼並標記爲重複。 – Undivided

+1

你將不得不問問原始程序員。沒有明顯的原因。 –

+0

@未經授權這真的很奇怪。我打算將它標記爲重複,並決定它不是,所以我只是讓它成爲。無論如何,我不知道它爲什麼標記它。 –

回答

3

您可以將引用看作原始變量的別名。

some_struct.x = 1; 
const int64 x1 = some_struct.x; 
const int64& x2 = some_struct.x; 
std::cout << x1 << "," << x2 << std::endl; // should be "1,1" 

some_struct.x = 2; 
std::cout << x1 << "," << x2 << std::endl; // should be "1,2" 
0

第一種情況是從some_struct.x得到的值的副本,而第二種情況依然與其綁定。所以如果some_struct.x更改其值,x將不會受到影響,但&x將引用更改。

沒有better,因爲這取決於使用此代碼的意圖。

+0

如果我不打算改變some_struct.x的值,那麼在引用的情況下編譯器是否做了任何優化? – Undivided

+0

我猜想,如果'some_struct.x'沒有改變,並且編譯器可以推斷出,那麼代碼將是相同的。如果傳遞some_struct,則可能是編譯器需要生成額外的加載指令,如果它不能推斷它沒有改變。 – Devolus

+0

@未分類:在此特定示例中,可能不是。但只要你寫'const int&x1 = some_ptr-> x;'那麼它很可能。細微的區別是'some_ptr'可能會改變。如果你知道指針沒有改變,但編譯器不確定,那麼引用可能是一個優化。 – MSalters