次のコードを考えてみましょう。
<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 でカバーされており、そのような場合に有効期間を延長するための変更が提案されています。
現状では、prvalue のみが一時値を参照するものとして扱われます。ただし、 center().x のようなメンバー アクセス式は、 g と clang の両方によって prvalue とみなされます。
今後の解決策では、メンバー アクセス式の結果として一時的な式が生成されること、およびこれらの式への参照をバインドすると、対応する一時オブジェクトの存続期間が延長されることが明確になります。
以上が## Const 参照を一時オブジェクトのサブオブジェクトにバインドすると、その有効期間は延長されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。