【问题标题】:C++ Ternary operator when returning a reference返回引用时的 C++ 三元运算符
【发布时间】: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


【解决方案1】:

它不起作用,只是你的编译器没有抱怨。有时 C++ 会发现你做错了什么。其他时候你欺骗它,你的代码很糟糕。

未定义的行为,例如跟随一个悬空的引用,可以“看起来有效”。

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2011-04-03
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多