你不明白的限制?操作符
Uunderstand the limits of the ? operator
如果我有一个最终会实现的函数,我能这样做吗?
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";
相关文章:
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 不明白迭代器,引用和指针失效,一个例子
- 而循环:简单的除法程序输出零,不明白为什么
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 不明白这个程序的输出
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- 什么是非营利组织???我的问题是我不明白为什么有人会使用它
- 我正在尝试用 c++ 制作菜单,但不明白为什么它不循环
- 我的程序不适用于 strcat - 我似乎不明白为什么?
- std::我不明白的矢量元素错误
- 我不明白 c++ 中的"cin"工作
- 我不明白参数和参数如何协同工作
- 什么'!((n % 5 != 0) ||(n % 20 == 0))'变身?为什么呢?我似乎不明白
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的
- 不明白使用双指针 (**) 创建 2d 动态数组
- 我不明白为什么会编译
- 我不明白尝试使用字符串作为函数参数时遇到的错误
- 我不明白在这个例子中什么时候调用构造函数
- 你不明白的限制?操作符