[英]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.