簡體   English   中英

std :: cout不喜歡std :: endl和有條件的條件下的字符串

[英]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和有條件的條件下的字符串?

std::endl是一個流操縱器。 這是一個功能。 它沒有與""共同的類型。 因此,它們不能是條件表達式的兩種類型。 由於公共類型是整個表達式的類型。

除了添加新行外,您甚至可能不需要std::endl所做的所有事情,因此只需將其替換為"\\n"即可打印新行。 這樣,在對操作數執行所有常規轉換之后,可以將通用類型推導為const char*

我將其更改為:

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

不可能用'(會更快)編寫它:

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

因為”為空,並導致“錯誤:空字符常量”。

條件if的解決方案是如此復雜,以至於人們應該首選以下條件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM