gpt4 book ai didi

C++ 对临时 : is it legal? 进行非常量引用

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:39 26 4
gpt4 key购买 nike

在这个公认的人为设计的示例中,X 类型的右值在语句末尾按预期被销毁。但是,被销毁的对象仍然可以通过非常量引用“x”访问。这是合法的 C++ 吗?如果是这样,结果是未定义的还是未指定的?编译器不应该在这里发出警告吗?我在 g++ 4.8.1 上对此进行了测试。编译器没有发出错误或警告(标志 -pedantic 和 -Wall)。

#include <iostream>

using namespace std;

struct X
{
int i;
X () { cout << "X ctor this address: " << this << endl; }
~X () { cout << "X dtor this address: " << this << endl; }
X & ref() { cout << "X ref this address: " << this << " i = " << i << endl; return *this; }
int & get () { cout << "X get this address: " << this << " i = " << i << endl; return i; }
void print () { cout << "X print this address: " << this << " i = " << i << endl; }
};

int main()
{
X & x = X().ref();
x.get() = 1234;
x.print();
}

这是输出:

X ctor this address: 0x7fff4f38ace0
X ref this address: 0x7fff4f38ace0 i = 0
X dtor this address: 0x7fff4f38ace0
X get this address: 0x7fff4f38ace0 i = 0
X print this address: 0x7fff4f38ace0 i = 1234

最佳答案

很明显是UB,不需要编译器来诊断。

在这种人为设计的情况下,我认为它可以,但一般情况下不会,因此实现这样的功能没有什么意义。

关于C++ 对临时 : is it legal? 进行非常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23518692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com