[英]What does the parenthesis operator does on its own in C++
在編寫一些代碼時,我有一個拼寫錯誤導致意外的編譯結果,並導致我玩和測試編譯器可以接受的內容(VS 2010)。
我寫了一個只包含括號運算符的表達式,其中包含一個數字(空括號表示編譯錯誤):
(444);
當我在調試模式下運行代碼時,程序似乎只是跳過該行。 當括號運算符單獨出現時,它的含義是什么?
如果我能非正式地回答,
(444);
是一份聲明 。 它可以在語言允許您編寫語句的任何地方編寫,例如在函數中。 它由一個表達式 444
,括在括號中(也是一個表達式),后跟語句終止符;
。
當然,任何按照as-if規則運行的理智編譯器都會在編譯期間將其刪除。
需要至少一個語句的地方是switch
塊(即使程序控制永遠不會到達該點):
switch (1){
case 0:
; // Removing this statement causes a compilation error
}
(444);
是一個由括號表達式(444)
和語句終止符組成的語句;
(444)
由括號()
和prvalue表達式444
帶括號的表達式(E)是一個主要表達式,其類型,值和值類別與E的類型,值和值類別相同。帶括號的表達式可以在與可以使用E的情境完全相同的上下文中使用,具有相同的含義 ,除非另有說明。
所以在這種特殊情況下,括號沒有其他意義,所以(444);
變成444
; 然后由編譯器優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.