C ++中const引用对象的条件赋值

时间:2018-08-27 16:16:38

标签: c++ ternary-operator const-reference

以下是说明我的问题的代码段:

class A {...};
const A& foo1() {...}
const A& foo2() {...}

void foo3(int score) {
  if (score > 5)
    const A &reward = foo1();
  else 
    const A &reward = foo2();

  ...

  // The 'reward' object is undefined here as it's scope ends within the respective if and else blocks.

}

如何在if else块之后访问reward中的foo3()对象? 避免代码重复是必需的。

提前谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用三元运算符:https://en.wikipedia.org/wiki/%3F%3A

(f1,1,foo)
(f2,1,oof)
(f3,1,foo)
(f4,42,foo)

答案 1 :(得分:1)

您可以使用conditional operator来发挥自己的优势。但是,您不能使用A& reward = ...,因为foo1()foo2()都返回const A&。您将必须使用const A& reward = ...

const A& reward = ( (score > 5) ? foo1() : foo2() );

答案 2 :(得分:1)

或者,您可以创建其他重载:

void foo3(const A& reward)
{
    // ...
}

void foo3(int score) {
    if (score > 5)
        foo3(foo1());
    else 
        foo3(foo2());
}