用cout打印出bool选项

时间:2014-10-27 20:44:34

标签: c++

我知道如果你的bool函数只打印出一些文本,有两种方法可以打印出结果。一个非常简单,就像这样:

#include <iostream> 

using namespace std; 

bool function(int x) 
{ 
   int y=5; 
   return x==y; 
} 

int main(void) 
{ 
   int a; 
   cin >> a; 
   if(function(a))
      cout << "Equal to 5"; 
   else
      cout << "Not equal to 5"; 
 }

我曾经知道在同一行中使用cout和bool在一行内打印出一些“消息”的其他方法,但以下解决方案并不能解决问题。这有什么问题?

 cout << function(a) ? "Equal" : "Not equal"; 

我收到通知函数调用函数将始终返回true,这很奇怪。

3 个答案:

答案 0 :(得分:4)

根据您的编译器,它可能会发出警告,准确说明问题所在。

main.cpp:15:21: warning: operator '?:' has lower precedence than '<<'; '<<' will be evaluated first [-Wparentheses]
cout << function(a) ? "Equal" : "Not equal"; 
~~~~~~~~~~~~~~~~~~~ ^
main.cpp:15:21: note: place parentheses around the '<<' expression to silence this warning
cout << function(a) ? "Equal" : "Not equal"; 
                    ^
(                  )
main.cpp:15:21: note: place parentheses around the '?:' expression to evaluate it first
cout << function(a) ? "Equal" : "Not equal"; 
main.cpp:15:26: warning: expression result unused [-Wunused-value]
   cout << function(a) ? "Equal" : "Not equal"; 

正如@The Paramagnetic Croissant所说,用括号括起来。

cout << (function(a) ? "Equal" : "Not equal"); 

@WhozCraig's comment,解释是顺序。如警告所示,首先评估<<,结果为(cout << function(a)) ? "Equal : "Not Equal";。这将返回&#34; Equal&#34; (或&#34;不等于&#34;,它不重要),导致随后的&#34;表达结果未使用&#34;警告。

答案 1 :(得分:2)

尝试

cout << (function(a) ? "Equal" : "Not equal"); 

答案 2 :(得分:2)

我不确定您是否意味着您的意思,甚至是否需要,但您是否考虑过使用std::boolalpha

std::cout << function(5) << ' ' << function(6) << std::endl;
std::cout << std::boolalpha << std::function(5) << ' ' << function(6) << std::endl;

输出:

1 0
true false

http://en.cppreference.com/w/cpp/io/manip/boolalpha