2
這是來自C++ 11。C++標準第12.1.14段的基本原理是什麼?
在一個
const
對象的構造,如果對象或任何其子對象的的值被經由未獲得,直接或間接地從構造的這個指針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'對象,而不是實際佔用內存。你不能這樣做,也有一個有效的'this'。 – Adam
還有另外一個優化可以在這裏發揮作用:對const對象的(非可變)成員的多次訪問總是產生相同的值,所以你只需要閱讀一次[live example](http://coliru.stacked-crooked的.com /一個/ 7728bbb912ddba1a)。這至少解釋了爲什麼第二次訪問cobj.c會產生一個未指定的值。 – dyp