std::cout 不喜欢 std::endl 和条件 if 中的字符串

std::cout doen't like std::endl and string in conditional-if

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 不喜欢 std::endl 和条件 if 中的字符串?

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

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

我改成了:

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

不可能用'来写(会更快):

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

因为 '' 为空并导致 "error: empty character constant".

条件 if 的解决方案非常复杂,因此应该更喜欢以下解决方案:

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