Namespaces
Variants
Views
Actions

goto statement

From cppreference.com
< cpp‎ | language
Revision as of 07:08, 25 March 2013 by Cubbi (Talk | contribs)

 
 
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
goto - return
Functions
Function declaration
Lambda function declaration
inline specifier
Exception specifications (deprecated)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
decltype (C++11)
auto (C++11)
alignas (C++11)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Implicit conversions - Explicit conversions
static_cast - dynamic_cast
const_cast - reinterpret_cast
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
 

Transfers control to a new location.

Used when it is otherwise impossible to transfer control to the desired location using conventional constructs.

Contents

Syntax

goto Template:sparam

Explanation

The goto statement transfers control to the location specified by Template:sparam. The goto statement must be in the same function as the Template:sparam it is referring. If goto statement transfers control backwards, all objects that are not yet initialized at the Template:sparam are destructed. It is illegal to transfer control forwards if doing so would skip initialization of an object.

Keywords

goto

Example

#include <iostream>
 
struct Object {
    ~Object() { std::cout << "d"; }
};
 
int main()
{
    int a = 10;
 
    //loop using goto
label:
    Object obj;
    std::cout << a << " ";
    a = a - 2;
 
    if (a != 0) {
        goto label;  //causes obj to be destructed
    }
    std::cout << '\n';
 
    //get out of multi-level loop easily
    for (int x = 0; x < 3; x++) {
        for (int y = 0; y < 3; y++) {
            std::cout << "(" << x << ";" << y << ") " << '\n';
            if (x + y >= 3) {
                goto endloop;
            }
        }
    }
endloop:
    std::cout << '\n';
 
    return 0;  //causes obj to be destructed
}

Output:

10 d8 d6 d4 d2
(0;0) (0;1) (0;2) (1;0) (1;1) (1;2)
d