【问题标题】:Using ternary operator to initialize a reference variable?使用三元运算符初始化引用变量?
【发布时间】:2012-07-14 18:00:47
【问题描述】:

抛开所有的可维护性和阅读问题,这些代码行会产生未定义的行为吗?

float  a = 0, b = 0;
float& x = some_condition()? a : b;
x = 5;
cout << a << ", " << b;

【问题讨论】:

  • 可以更简单:( some_condition() ? a : b ) = 5;

标签: c++ reference ternary-operator


【解决方案1】:

不,没关系。它不会在此代码中创建未定义的行为。您只需根据条件将 a 或 b 的值更改为 5。

【讨论】:

    【解决方案2】:

    这绝对没问题,只要条件的两边都是可用于初始化引用的表达式(例如变量、指针解引用等)

    float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code
    float& x = some_condition()? a : b+1;   // This will not compile, because you cannot take reference of b+1
    

    【讨论】:

    • 嗯,无法编译是一种完美定义的行为,不是吗?
    • 可以说,是的——一个格式错误的程序确实表现出定义的行为——什么都没有。
    猜你喜欢
    • 2021-07-03
    • 2010-12-20
    • 2013-07-27
    • 2012-03-01
    • 2023-01-02
    • 2013-03-30
    • 2015-07-11
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多