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;
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;