簡體   English   中英

為什么臨時對象必須具有不同的地址?

[英]Why is there a rule that temporary objects must have distinct addresses?

我感興趣的情況是

const int &n1 = 123;
const int &n2 = 123;

我知道這就好像文字123是初始化臨時int的參數而const只是一個無聊的編譯時間檢查,但我想知道為什么在這種情況下需要不同的臨時值,而不是n1n2有同樣的臨時性。

我知道規則存在但不知道為什么存在這個規則。

 const int &n1 = 123; const int &n2 = 123; 

我想知道在這種情況下需要不同臨時工的原因。

因為C ++委員會可能不關心這個具體案例。 他們的目標是什么,他們的目標是在更有用和更常見的情況下提供關於如何處理臨時性的規則:評估全表達鏈的創建,使用和銷毀臨時工:

class A { /* ... */ };
A make_a();
void consume_a(A&&);
void use_a(A const&);

consume_a(make_a());
use_a(make_a());

很明顯, make_a()每次都需要生成不同的臨時A

如果希望它們具有相同的地址,則可以始終執行const int &n2 = n1 如果您以其他方式執行此操作,編譯器可能會懷疑您有自己的理由這樣做。

不允許編譯器猜測您關注的是什么。 它實現了你寫的東西。 按照你的建議做一個優化意味着比較bool test = &n1 == &n2將給出另一個結果。 一般來說,只要不修改結果,就允許編譯器進行優化。

您應該考慮以前的編譯器效率遠低於現在。 30年前,這樣的優化或語言特征應該是不可能的。 因此,如果它不是優化,它將是對語言的修改,可能會改變許多現有程序的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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