1

这是一个说明我的问题的代码片段:

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()这是避免代码重复所必需的。

提前致谢 !

4

3 回答 3

5

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

const A &reward = (score > 5) ? foo1() : foo2();
于 2018-08-27T16:21:07.140 回答
1

作为替代方案,您可以创建额外的重载:

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

void foo3(int score) {
    if (score > 5)
        foo3(foo1());
    else 
        foo3(foo2());
}
于 2018-08-27T16:28:19.277 回答
1

您可以使用条件运算符来发挥自己的优势。但是,您不能使用A& reward = ...since bothfoo1()foo2()return const A&。您将不得不使用const A& reward = ....

const A& reward = ( (score > 5) ? foo1() : foo2() );
于 2018-08-27T16:26:14.977 回答