簡體   English   中英

括號運算符在C ++中自己做了什么

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

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