绑定引用实际上是否评估操作数?

Rus*_*lan 9 c++ initialization reference undefined-behavior

考虑以下代码:

int& x=*new int;
Run Code Online (Sandbox Code Playgroud)

赋值的RHS是否实际取消引用新创建的指针,由于读取未初始化的变量而导致UB?或者这可以合法地用于以后分配像x=5;

Xir*_*ema 6

据我所知,你所做的一切都没有涉及未定义的行为.

但是,它会立即产生内存泄漏的风险.它可以快速解决(因为它&x会解析到泄漏的内存的地址,因此可以删除)但是如果你要离开作用域,你将无法检索该指针.

编辑:到了这一点,如果你要写

int& x=*new int;
x = 5;

std::cout << x << std::endl;

std::cin >> x;

std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)

代码的行为就像你只是简单地声明x一样int x;,除了指针在程序退出范围后也会悬空.

如果您在为其分配值之前尝试读取未初始化的变量,则会实现未定义的行为,但如果x分配了堆栈,则不会是不真实的.