【发布时间】: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); }
【问题讨论】:
-
去掉
()还能用吗? -
仍然是未定义的行为,未定义行为的乐趣在于您的程序可以正常工作
-
我认为“工作”应该用引号引起来,因为我收到了
warning: reference to stack memory associated with parameter 'x' returned [-Wreturn-stack-address]。 -
看似工作不等于工作gcc.godbolt.org/z/4j755sWbh
标签: c++ reference conditional-operator