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

问题描述 投票:0回答:2
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不喜欢条件-if中的std :: endl和string?

c++ conditional cout stdstring
2个回答
3
投票

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

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


0
投票

我改成了:

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

用'(会更快)写它是不可能的:

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

因为''为空并导致“错误:空字符常量”。

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

if (newline) std::cout << std::endl;
© www.soinside.com 2019 - 2024. All rights reserved.