簡體   English   中英

為什么這段代碼會編譯? cout <“tt”;

[英]Why does this code compile? cout < “tt”;

cout是類ostream對象, ostreambasic_ostream typedef:

extern ostream cout;

typedef basic_ostream<char> ostream;

template <class charT, class traits = char_traits<charT> >
  class basic_ostream;

但這些類都沒有operator<

所以我無法理解為什么這段代碼編譯沒有任何錯誤:

std::cout < "aaa";

在C ++語言中,運算符<使編譯器考慮表單的內置候選函數

bool operator<(T, T);

對於每個可能的指針類型T 特別是,這意味着void *類型具有這樣的功能。 這是適用於您的情況的功能。 字符串文字可以隱式轉換為void *std::cout也可以隱式轉換為void *

您可以使用以下極簡主義示例重現相同的行為

struct X {
  operator void *() { return 0; }
};

int main() {
  X() < "";
}

以上內容適用於C ++ 03。 我不確定為什么它在C + 11中編譯很難(假設它確實如此),因為在C ++ 11中,流轉換為void *顯式轉換為bool所取代。

暫無
暫無

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

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