【问题标题】:std::cout doen't like std::endl and string in conditional-ifstd::cout 不喜欢条件-if 中的 std::endl 和字符串
【发布时间】:2017-12-17 10:15:08
【问题描述】:
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 和字符串?

【问题讨论】:

  • 请分享您的代码
  • 三元运算符需要相同类型的结果值。
  • 这里也没有性能原因使用三元运算符。 ?: 和 if-else-statement 之间的差异(如果有)将被 I/O 操作的成本所掩盖。
  • 这不是问题,但您不需要在 newlinestd::endl 周围加上括号。

标签: c++ conditional cout stdstring


【解决方案1】:

std::endl 是一个流操作符。这是一个功能。它没有与"" 相同的类型。所以它们不能是两种类型的条件表达式。由于通用类型是整个表达式的类型。

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

【讨论】:

    【解决方案2】:

    我改成:

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

    不能用'写(会更快):

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 2020-03-19
      • 1970-01-01
      • 2021-08-04
      • 2017-11-21
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多