返回引用时的 C++ 三元运算符
Posted
技术标签:
【中文标题】返回引用时的 C++ 三元运算符【英文标题】:C++ Ternary operator when returning a reference 【发布时间】:2021-07-04 13:18:13 【问题描述】:我了解到以下函数不起作用,因为 x 和 y 在 return 语句之后不在堆栈上。
int& max(int x, int y)
if (x < y)
return x;
else
return y;
但是为什么像这样使用三元运算符时它会起作用?
int& max(int x, int y) return (x > y ? x : y);
【问题讨论】:
去掉()
还能用吗?
It doesn't.
仍然是未定义的行为,未定义行为的乐趣在于您的程序可以正常工作
我认为“工作”应该用引号引起来,因为我收到了warning: reference to stack memory associated with parameter 'x' returned [-Wreturn-stack-address]
。
看似工作不等于工作gcc.godbolt.org/z/4j755sWbh
【参考方案1】:
它不起作用,只是你的编译器没有抱怨。有时 C++ 会发现你做错了什么。其他时候你欺骗它,你的代码很糟糕。
未定义的行为,例如跟随一个悬空的引用,可以“看起来有效”。
【讨论】:
以上是关于返回引用时的 C++ 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中创建对三元运算符结果的 const 引用是不是安全?