考慮下面的代碼片段:void({})中的{}是什麼?
auto f() { return void({}); }
int main() { f(); }
什麼也正是在void({})
的{}
?
它是如何解釋的?
只是出於好奇,當然。無論如何,我們再走一點。
請注意,GCC 6.1和鏗鏘3.8編譯沒有錯誤(-std=c++14 -pedantic
)。
後者不抱怨,前者顯示了一個警告:
警告:列表初始化非類類型不得括號
使用-pedantic-errors
相反,GCC以錯誤結束而鏗鏘編譯它。
這種差異是兩個編譯器之一的錯誤嗎?
我的意思是,它應該被接受與否的有效代碼?
在某些語言中,它表示一個空表或列表。但是,在基於類型的語言中,它應該有一個類型說明符。它與作爲初始化程序沒有任何關係,因此imo,它似乎是某種空白塊範圍。 – Chemistpp
聽起來像一個鏗鏘蟲。這轉到[\ [expr.type.conv \]/2](https://timsong-cpp.github.io/cppwp/expr.type.conv#2)'「否則,表達式是指定類型的結果對象是直接初始化([dcl.init])的初始化方法「,這對」void「沒有意義。 –
它看起來是lambda表達式:[link](http://en.cppreference.com/w/cpp/language/lambda) – Raindrop7