名稱空間
變體
操作

語句

來自 cppreference.com
< cpp‎ | 語言
 
 
C++ 語言
 
 

語句 是 C++ 程式中按順序執行的程式碼片段。任何函式的主體都是一系列語句。例如

int main()
{
    int n = 1;                        // declaration statement
    n = n + 1;                        // expression statement
    std::cout << "n = " << n << '\n'; // expression statement
    return 0;                         // return statement
}

C++ 包括以下型別的語句

(C++26 起)
(TM TS)

目錄

[編輯] 帶標籤語句

帶標籤語句為語句貼上標籤,用於控制流目的。

label statement
標籤 - 應用於語句的標籤(定義如下)
語句 - 標籤所應用的語句,它可以是帶標籤語句本身,允許多個標籤

[編輯] 標籤

label 定義為

attr (可選) identifier : (1)
attr (可選) case constexpr : (2)
attr (可選) default: (3)
1) goto 的目標;
2) switch 語句中的 case 標籤;
3) switch 語句中的 default 標籤。

屬性序列 attr 可以出現在標籤的開頭(在這種情況下,它應用於標籤),或者緊鄰任何語句本身之前,在這種情況下,它應用於整個語句。

(C++11 起)

在函式內部宣告的帶有識別符號的標籤與該函式中所有巢狀塊中,在其宣告之前和之後,具有相同識別符號的所有 goto 語句匹配。

一個函式中的兩個標籤不能具有相同的識別符號。

除了新增到語句之外,標籤還可以用於複合語句中的任何位置。

(C++23 起)

標籤不會透過非限定查詢找到:標籤可以與程式中的任何其他實體同名。

void f()
{
    {
        goto label; // label in scope even though declared later
        label:      // label can appear at the end of a block standalone since C++23
    }
    goto label; // label ignores block scope
}
 
void g()
{
    goto label; // error: label not in scope in g()
}

[編輯] 受控制流限制的語句

以下語句是 受控制流限制的語句 

(C++17 起)
(C++23 起)

對於每個受控制流限制的語句 S

  • S 中宣告的所有 goto 目標標籤只能由 S 中的語句引用。
  • S 中出現的每個 casedefault 標籤只能與 S 中的 switch 語句關聯。

[編輯] 表示式語句

表示式語句是後跟分號的表示式。

attr (可選) expression (可選) ;
屬性 - (C++11 起) 可選的任意數量屬性序列
表示式 - 一個表示式

典型 C++ 程式中的大多數語句都是表示式語句,例如賦值或函式呼叫。

沒有表示式的表示式語句稱為 空語句。它通常用於為 forwhile 迴圈提供空主體。它也可以用於在複合語句的末尾攜帶一個標籤。(C++23 前)

[編輯] 複合語句

複合語句或 將一系列語句組合成單個語句。

attr (可選) { statement... (可選) label... (可選)(C++23 起) }

當期望一個語句,但需要按順序執行多個語句時(例如,在 if 語句或迴圈中),可以使用複合語句

if (x > 5)          // start of if statement
{                   // start of block
    int n = 1;      // declaration statement
    std::cout << n; // expression statement
}                   // end of block, end of if statement

每個複合語句都引入自己的塊作用域;塊內宣告的變數在結束大括號處按相反順序銷燬

int main()
{ // start of outer block
    {                                // start of inner block
        std::ofstream f("test.txt"); // declaration statement
        f << "abc\n";                // expression statement
    }                                // end of inner block, f is flushed and closed
    std::ifstream f("test.txt"); // declaration statement
    std::string str;             // declaration statement
    f >> str;                    // expression statement
} // end of outer block, str is destroyed, f is closed

複合語句末尾的標籤被視為後面跟著一個空語句。

(C++23 起)

[編輯] 選擇語句

選擇語句在幾種控制流中選擇一種。

attr (可選) if constexpr(可選) ( init-statement (可選) condition ) statement (1)
attr (可選) if constexpr(可選) ( init-statement (可選) condition ) statement
    else statement
(2)
attr (可選) switch ( init-statement (可選) condition ) statement (3)
attr (可選) if !(可選) consteval compound-statement (4) (C++23 起)
attr (可選) if !(可選) consteval compound-statement else statement (5) (C++23 起)
1) if 語句;
2) 帶 else 子句的 if 語句;
3) switch 語句;
4) consteval if 語句;
5) 帶 else 子句的 consteval if 語句。

[編輯] 迭代語句

迭代語句重複執行某些程式碼。

attr (可選) while ( condition ) statement (1)
attr (可選) do statement while ( expression ) ; (2)
attr (可選) for ( init-statement condition (可選) ; expression (可選) ) statement (3)
attr (可選) for
    ( init-statement (可選)(C++20 起) for-range-decl : for-range-init ) statement
(4) (C++11 起)
1) while 迴圈;
2) do-while 迴圈;
3) for 迴圈;
4) 範圍 for 迴圈。

[編輯] 跳轉語句

跳轉語句無條件轉移控制流。

attr (可選) break; (1)
attr (可選) continue; (2)
attr (可選) return expression (可選) ; (3)
attr (可選) return braced-init-list ; (4) (C++11 起)
attr (可選) goto identifier ; (5)
1) break 語句;
2) continue 語句;
3) 帶可選表示式的 return 語句;
4) 使用列表初始化return 語句;
5) goto 語句。

注意:對於所有跳轉語句,跳出迴圈、跳出塊或跳回到具有自動儲存持續時間的已初始化變數,都涉及銷燬在跳出點作用域內但在跳入點作用域外具有自動儲存持續時間的物件。如果初始化了多個物件,則銷燬順序與初始化順序相反。

斷言語句

契約斷言。

contract_assert attr (可選) ( predicate ) ;
1) contract_assert 語句。
(C++26 起)

[編輯] 宣告語句

宣告語句將一個或多個識別符號引入塊中。

塊宣告 (1)
1) 詳見 宣告初始化

[編輯] try

try 塊捕獲執行其他語句時丟擲的異常。

attr (可選) try compound-statement handler-sequence (1)
1) 詳見 try


原子和同步塊

原子和同步塊提供事務性記憶體

synchronized compound-statement (1) (TM TS)
atomic_noexcept compound-statement (2) (TM TS)
atomic_cancel compound-statement (3) (TM TS)
atomic_commit compound-statement (4) (TM TS)
1) 同步塊,與所有同步塊以單一總順序執行;
2) 遇到異常時中止的原子塊
3) 遇到異常時回滾的原子塊
4) 遇到異常時提交的原子塊
(TM TS)

[編輯] 子語句

語句的 子語句 是以下之一

如果滿足以下任何條件,語句 S1 包含 語句 S2

  • S2S1 的子語句
  • S1 是選擇語句或迭代語句,且 S2S1init-statement
  • S1try,且 S2 是其 複合語句 或其 handler-seq  中任何 處理程式複合語句
  • S1 包含語句 S3S3 包含 S2

如果語句 S2 包含 S1,則語句 S1 語句 S2 包含

[編輯] 另見

C 文件 關於 語句
English 日本語 中文(简体) 中文(繁體)