문장
문장 또는 문은 순서대로 실행되는 C++ 프로그램의 단편이다. 모든 함수의 본문은 나열된 문장으로 이루어져 있다. 다음은 문장의 예시이다.
int main() { int n = 1; // 선언문 n = n + 1; // 식문 (expression statement) std::cout << "n = " << n << '\n'; // 식문 return 0; // 반환문 }
C++는 다음 유형의 문장을 포함한다:
목차 |
[편집] 라벨문
A labeled statement labels a statement for control flow purposes.
attr(optional) identifier : statement
|
(1) | ||||||||
attr(optional) case constexpr : statement
|
(2) | ||||||||
attr(optional) default : statement
|
(3) | ||||||||
A statement may carry multiple labels.
An attribute sequence attr may appear just before the label (in which case it applies to the label), or just before any statement itself, in which case it applies to the entire statement. |
(since C++11) |
A label with an identifier declared inside a function matches all goto statements with the same identifier in that function, in all nested blocks, before and after its own declaration.
Two labels in a function must not have the same identifier.
Labels are not found by unqualified lookup: a label can have the same name as any other entity in the program.
void f() { { goto label; // label in scope even though declared later label:; } goto label; // label ignores block scope } void g() { goto label; // error: label not in scope in g() }
[편집] 식문
An expression statement is an expression followed by a semicolon.
attr(optional) expression(optional) ;
|
(1) | ||||||||
attr | - | (since C++11) optional sequence of any number of attributes |
expression | - | an expression |
Most statements in a typical C++ program are expression statements, such as assignments or function calls.
An expression statement without an expression is called a null statement. It is often used to provide an empty body to a for or while loop. It can also be used to carry a label in the end of a compound statement.
[편집] 복합문
A compound statement or block groups a sequence of statements into a single statement.
attr(optional) { statement...(optional) }
|
(1) | ||||||||
When one statement is expected, but multiple statements need to be executed in sequence (for example, in an if statement or a loop), a compound statement may be used:
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
Each compound statement introduces its own block scope; variables declared inside a block are destroyed at the closing brace in reverse order:
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
[편집] 선택문
A selection statement chooses between one of several control flows.
attr(optional) if constexpr (optional) ( init-statement(optional) condition ) statement
|
(1) | ||||||||
attr(optional) if constexpr (optional) ( init-statement(optional) condition ) statement else statement
|
(2) | ||||||||
attr(optional) switch ( init-statement(optional) condition ) statement
|
(3) | ||||||||
attr(optional) if ! (optional) consteval compound-statement
|
(4) | (since C++23) | |||||||
attr(optional) if ! (optional) consteval compound-statement else statement
|
(5) | (since C++23) | |||||||
[편집] 반복문
An iteration statement repeatedly executes some code.
attr(optional) while ( condition ) statement
|
(1) | ||||||||
attr(optional) do statement while ( expression ) ;
|
(2) | ||||||||
attr(optional) for ( init-statement condition(optional) ; expression(optional) ) statement
|
(3) | ||||||||
attr(optional) for ( for-range-decl : for-range-init ) statement
|
(4) | (since C++11) | |||||||
[편집] Jump statements
A jump statement unconditionally transfers control flow.
attr(optional) break ;
|
(1) | ||||||||
attr(optional) continue ;
|
(2) | ||||||||
attr(optional) return expression(optional) ;
|
(3) | ||||||||
attr(optional) return braced-init-list ;
|
(4) | (since C++11) | |||||||
attr(optional) goto identifier ;
|
(5) | ||||||||
Note: for all jump statements, transfer out of a loop, out of a block, or back past an initialized variable with automatic storage duration involves the destruction of objects with automatic storage duration that are in scope at the point transferred from but not at the point transferred to. If multiple objects were initialized, the order of destruction is the opposite of the order of initialization.
[편집] 선언문
A declaration statement introduces one or more identifiers into a block.
block-declaration | (1) | ||||||||
[편집] Try blocks
A try block catches exceptions thrown when executing other statements.
attr(optional) try compound-statement handler-sequence
|
(1) | ||||||||
Atomic and synchronized blocksAn atomic and synchronized block provides transactional memory.
1) synchronized block, executed in single total order with all synchronized blocks;
2) atomic block that aborts on exceptions;
3) atomic block that rolls back on exceptions;
4) atomic block that commits on exceptions.
|
(TM TS) |
[편집] See also
C documentation for Statements
|