This question already has answers here:
Conditional operator used in cout statement

(2个答案)


1年前关闭。




我正在解决有关主教在棋盘上移动的问题。在代码的某一时刻,我有以下语句:

std::cout << (abs(c2-c1) == abs(r2-r1)) ? 1 : 2 << std::endl;

这将产生以下错误:



但是,我通过在代码中包含一个附加变量来立即修复此错误:

int steps = (abs(c2-c1) == abs(r2-r1)) ? 1 : 2;
std::cout << steps << std::endl;

三元运算符如何工作,如何确定其返回类型(如编译器称为<unresolved overloaded function type>)?

最佳答案

这与推导返回类型的方式以及operator precedence无关。当你有

std::cout << (abs(c2-c1) == abs(r2-r1)) ? 1 : 2 << std::endl;

不是
std::cout << ((abs(c2-c1) == abs(r2-r1)) ? 1 : 2) << std::endl;

因为?:的优先级低于<<。这意味着您实际拥有的是
(std::cout << (abs(c2-c1) == abs(r2-r1))) ? 1 : (2 << std::endl);

这就是为什么您收到有关<unresolved overloaded function type>的错误的原因。只需使用括号
std::cout << ((abs(c2-c1) == abs(r2-r1)) ? 1 : 2) << std::endl;

这样你就可以了

关于c++ - 如何确定三元运算符的返回类型? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57400874/

10-12 16:03