2013-05-21 120 views
4
([]() -> decltype(std::cout << "Hello") { 
    return std::cout << "Hello"; 
}()) << ", world!"; 

打印Hello, world!用decltype解釋此代碼

我根本不明白這裏發生了什麼。有人能用簡單的語言向我解釋嗎?

+1

這是一個定義並立即執行的lambda函數。閱讀關於這些東西。 –

+1

順便說一句,這相當於'[] {return std :: cout <<「Hello」;}()<<「,world!」;'。 – chris

+1

首先,他們用這些怪物毀了我心愛的可讀Python語言,現在他們已經完成了C++。如果ISO bods有機會把它們放在頭上對C做同樣的事情,我會追蹤它們並用溼芹菜棒毆打他們(以延長痛苦):-) – paxdiablo

回答

6
([]() -> decltype(std::cout << "Hello") 

此創建一個lambda(就地功能)與表達std::cout << "Hello"具有相同的返回類型 - 這是std::ostream&。所述[]開始拉姆達,所述()是一個空的參數列表中,-> preceeds返回類型,和decltype(X)相當於表達式X的類型然後函數體:

{ 
    return std::cout << "Hello"; 
} 

然後調用該函數時......輸出「你好」,並返回流....

()) 

最後,返回的數據流,多了幾分文本發送...

<< ", world!";