考虑以下代码:
<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中文网其他相关文章!