你不明白的限制?操作符

Uunderstand the limits of the ? operator

本文关键字:操作符 明白      更新时间:2023-10-16

如果我有一个最终会实现的函数,我能这样做吗?

somefunction(data) ? cout << "This is true" << endl : cout << this false << endl; 

还是我有点不对劲?或者对于这样的操作数,这是不可能的吗?或者我可以调用另一个函数吗?最后,我试图找出这个函数的局限性,以及在c++教程网站中没有显示的其他用途。

std:: cout<& lt;(somefunction(数据)?"This is true": anotherfunction (data) <<p>或人们能想到的其他情况…

我会看看维基百科。它的语法是

condition ? trueOutput : falseOutput;

也可以嵌套它们。您可以输出任何值,但条件必须是布尔值。

在你的例子中应该是:

cout << (someFunction(data) ? "True" : "False") << endl;

你可以嵌套它!

cout << (someFunction(data) ? "True" : (newTernary(data) ? "False, but true" : (finalTernary(data) ? "False, false, and finally true" : "Always false:("))) << endl;

不完全是一个"答案",但请记住,几乎总是使用三元操作符来处理最简单的事情之外的任何事情都是"不好的"。

合理的用法如下:

cout << "There are " << count << " item" << ((count != 1) ? "s":"") 
     << " in your basket";

但是如果您的三元操作符是嵌套的,那么您需要使用if/else类型构造代替。人们将来会想要毫不费力地阅读代码!

当然,初始语句可以在没有三元操作符的情况下完成,假设结果是bool[如果不是,您可以使用static_cast<bool>(someFunction(data))]将其转换为bool

cout << "This is " << boolalpha << someFunction(data) << endl;

"限制"是三个参数必须是表达式,并且它们的类型有规则。在您的情况下,所有的工作,因为cout << foo是一个表达式。虽然你需要将this false替换为"this is false"

但是正如其他人指出的那样,最好使用裸字符串作为表达式。我应该写

std::cout << "This is " << (somefunction(data) ? "true" : "false") << ".n";