Difference between revisions of "cpp/language/statements"
(loop and block were correct. plural was correct) |
(so that this is not a total waste of time, update to TM TS) |
||
Line 13: | Line 13: | ||
}} | }} | ||
− | + | C++ includes the following types of statements: | |
− | + | ||
@1@ expression statements; | @1@ expression statements; | ||
Line 22: | Line 21: | ||
@5@ jump statements; | @5@ jump statements; | ||
@6@ declaration statements; | @6@ declaration statements; | ||
− | @7@ try blocks | + | @7@ try blocks; |
+ | @8@ atomic and synchronized statements{{mark since tm ts}} | ||
===Labels=== | ===Labels=== | ||
Line 186: | Line 186: | ||
{{sdsc end}} | {{sdsc end}} | ||
@1@ see {{rlp|try_catch|try/catch}} for details. | @1@ see {{rlp|try_catch|try/catch}} for details. | ||
+ | |||
+ | ===Atomic and synchronized blocks=== | ||
+ | Atomic and synchronized blocks | ||
+ | |||
+ | A compound statement or ''block'' is a brace-enclosed sequence of statements. | ||
+ | |||
+ | {{sdsc begin}} | ||
+ | {{sdsc|num=1|notes={{mark since tm ts}}|1= | ||
+ | {{ttb|synchronized}} {{spar|compound-statement...}} | ||
+ | }} | ||
+ | {{sdsc|num=2|notes={{mark since tm ts}}|1= | ||
+ | {{ttb|atomic_noexcept}} {{spar|compound-statement...}} | ||
+ | }} | ||
+ | {{sdsc|num=3|notes={{mark since tm ts}}|1= | ||
+ | {{ttb|atomic_cancel}} {{spar|compound-statement...}} | ||
+ | }} | ||
+ | {{sdsc|num=4|notes={{mark since tm ts}}|1= | ||
+ | {{ttb|atomic_commit}} {{spar|compound-statement...}} | ||
+ | }} | ||
+ | {{sdsc end}} | ||
+ | @1@ a [[cpp/language/transactional_memory#Synchronized_blocks|synchronized block]], executed in single total order with all synchronized blocks | ||
+ | @2@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that aborts on exceptions | ||
+ | @3@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that rolls back on exceptions | ||
+ | @4@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that commits on exceptions | ||
===See also=== | ===See also=== |
Revision as of 07:58, 21 January 2016
Statements are fragments of the C++ program that are executed in sequence. The body of any function is a sequence of statements. For example:
int main() { int n = 1; // declaration statement n = n + 1; // expression statement std::cout << "n = " << n << '\n'; // expression statement return 0; // return statement }
C++ includes the following types of statements:
Contents |
Labels
Any statement can be labeled, by providing a label followed by a colon before the statement itself:
attr(optional) identifier : statement
|
(1) | ||||||||
attr(optional) case constexpr : statement
|
(2) | ||||||||
attr(optional) default : statement
|
(3) | ||||||||
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. A statement may carry multiple labels. Labels (and only labels) have function scope. Labels are ignored by unqualified lookup: a label can have the same name as any other entity in the program.
Expression statements
An expression followed by a semicolon is a statement.
attr(optional) expression(optional) ;
|
(1) | ||||||||
attr(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.
Compound statement
A compound statement or block is a brace-enclosed sequence of statements.
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 block std::ofstream f("test.txt"); // declaration statment f << "abc\n"; // expression statement } // end of block: f is flushed and closed std::ifstream f("test.txt"); std::string str; f >> str; }
Selection statements
Selection statements choose between one of several flows of control
attr(optional) if ( condition ) statement
|
(1) | ||||||||
attr(optional) if ( condition ) statement else statement
|
(2) | ||||||||
attr(optional) switch ( condition ) statement
|
(3) | ||||||||
Iteration statements
Iteration statements repeatedly execute some code.
attr(optional) while ( condition ) statement
|
(1) | ||||||||
attr(optional) do statement while ( expression ) ;
|
(2) | ||||||||
attr(optional) for ( 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
Jump statements unconditionally transfer flow control
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.
Declaration statements
Declaration statements introduce one or more identifiers into a block.
block-declaration ;
|
(1) | ||||||||
Try blocks
Try blocks provide the ability to catch exceptions thrown when executing other statements.
attr(optional) try compound-statement handler-sequence
|
(1) | ||||||||
Atomic and synchronized blocks
Atomic and synchronized blocks
A compound statement or block is a brace-enclosed sequence of statements.
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) | |||||||
See also
C documentation for Statements
|