考慮以下程式碼:
<code class="cpp">#include <stdio.h> struct P2d { double x, y; P2d(double x, double y) : x(x), y(y) {} ~P2d() { printf("Destructor called\n"); } }; P2d center() { return P2d(10, 10); } int main(int argc, const char *argv[]) { const double& x = center().x; printf("x = %.18g\n", x); return 0; }</code>
在此範例中,center()傳回一個臨時P2d 物件。問題出現了:這個臨時物件的生命週期是多少?
不同的編譯器表現出不同的行為:
根據 C 標準,綁定對臨時物件的子物件的引用不會延長臨時物件的生命週期。然而,CWG 1651 涵蓋了這一點,它建議進行更改以延長此類情況下的生命週期。
現況是只有純右值被視為引用臨時值。但是,成員存取表達式(如 center().x)被 g 和 clang 視為純右值。
即將到來的決議將闡明成員存取表達式會產生臨時表達式,並且綁定對這些表達式的引用可以延長相應臨時物件的生命週期。
以上是## 將常數引用綁定到臨時物件的子物件是否會延長其生命週期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!