簡體   English   中英

C ++標准的12.1.14段的依據是什么?

[英]What is the rationale for paragraph 12.1.14 of the C++ standard?

這是來自C ++ 11。

在構造const對象的過程中,如果通過未從構造函數的this指針直接或間接獲得的glvalue訪問該對象或其子對象的值,則未指定由此獲得的對象或子對象的值。 [ 示例:

 struct C; void no_opt(C*); struct C { int c; C() : c(0) { no_opt(this); } }; const C cobj; void no_opt(C* cptr) { int i = cobj.c * 100; // value of cobj.c is unspecified cptr->c = 1; cout << cobj.c * 100 // value of cobj.c is unspecified << '\\n'; } 

結束示例 ]

為什么只適用於const對象?

要真正理解其原理,您需要與委員會成員通訊,或者至少閱讀相關討論。 我不能幫你。

在上下文中這樣做的目的是對const對象的構造施加比通常適用的更為嚴格的限制。 通常在S12.7中涵蓋了一些適用的規則,並且廣泛地將重點放在對象的生命周期上。 例如,它們不禁止混疊。

對const對象的限制將使實現者可以采用更積極的優化策略。 例如,一個對象可能是在翻譯時構造的,或者是通過將其提升到循環之外而僅構造一次的,或者是完全優化了的。 由於const對象不會更改,因此編譯器通常不必擔心別名,但是在這種特殊情況下,它們會擔心(如示例代碼所示)。

我不禁要想到,在某些情況下,此規則會阻止某些其他外部可見的違反const要求的行為。 給出的示例不是這種情況,我一直找不到。 也許其他貢獻者可以提供幫助。

暫無
暫無

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

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