std :: cout不喜欢条件if中的std :: endl和string

时间:2017-12-17 10:15:09

标签: c++ conditional cout stdstring

main.cpp: In function ‘void PrintVector(std::vector<std::__cxx11::basic_string<char> >&, bool)’:
main.cpp:16:41: error: overloaded function with no contextual type information
  std::cout << ((newline)? (std::endl) : "");
                                         ^~

为什么std :: cout在condition-if?

中不喜欢std :: endl和string

2 个答案:

答案 0 :(得分:3)

std::endl是一个流操纵器。这是一个功能。它与""没有共同的类型。所以它们不能是两种类型的条件表达式。由于common类型是整个表达式的类型。

除了添加新行之外,您可能甚至不需要std::endl所做的一切,所以只需将其替换为"\n"即可打印换行符。这样,在对操作数执行所有常规转换后,可以将公共类型推导为const char*

答案 1 :(得分:0)

我把它改为:

std::cout << (newline? "\n" : "") << std::flush;

无法用&#39;来编写它。 (会更快):

std::cout << (newline? '\n' : '') << std::flush;

因为&#39;&#39;是空的,导致&#34;错误:空字符常量&#34;。

使用条件if的解决方案非常复杂,应该更喜欢以下内容:

if (newline) std::cout << std::endl;