Espacios de nombres
Variantes
Acciones

Instrucciones

De cppreference.com
< cpp‎ | language

Las instrucciones son fragmentos de un programa de C++ que se ejecutan en secuencia. El cuerpo de una función es una secuencia de instrucciones. Por ejemplo:

int main()
{
    int n = 1;                        // instrucción de declaración
    n = n + 1;                        // instrucción de expresión
    std::cout << "n = " << n << '\n'; // instrucción de expresión 
    return 0;                         // instrucción return
}

C++ incluye los siguientes tipos de instrucciones:

1) instrucciones con etiqueta;
2) instrucciones de expresión;
3) instrucciones compuestas;
4) instrucciones de selección;
5) instrucciones de iteración;
6) instrucciones de salto;
7) instrucciones de declaración;
8) bloques try;
9) bloques atómicos y sincronizados (TM TS).

Contenido

[editar] Etiquetas

Cualquier instrucción puede ser etiquetada al proporcionar una etiqueta seguida de dos puntos antes de la instrucción misma. Con fines de control de flujo.

atrib(opcional) identificador : instrucción (1)
atrib(opcional) case constexpr : instrucción (2)
atrib(opcional) default : instrucción (3)
1) destino para goto;
2) etiqueta case en una instrucción switch;
3) etiqueta default en una instrucción switch.

Una instrucción puede llevar varias etiquetas.

Una secuencia de atributos atrib puede aparecer justo antes de la etiqueta (que en tal caso se aplica a la etiqueta), o justo antes de la instrucción misma, que en tal caso se aplica a toda la instrucción.

(desde C++11)

Las etiquetas (y solamente las etiquetas) tienen ámbito de función. Una etiqueta con un identificador declarado dentro de una función coincide con todas las sentencias goto con el mismo identificador en esa función, en todos los bloques anidados, antes y después de su propia declaración.

Dos etiquetas en una función no pueden tener el mismo identificador.

Las etiquetas se ignoran por la búsqueda no calificada: una etiqueta puede tener el mismo nombre que cualquier otra entidad en el programa.

void f() {
    {
        goto label; // etiqueta en ámbito aunque se declaré más tarde
label:;
    }
    goto label; // la etiqueta ignora el ámbito de bloque
}
 
void g() {
    goto label; // error: etiqueta no en ámbito en g()
}

[editar] Instrucciones de expresión

Una expresión seguida de un punto y coma es una instrucción.

atrib(opcional) expresión(opcional) ; (1)
atrib(C++11) - Secuencia opcional de cualquier número de atributos.
expresión - Una expresión.

La mayoría de las instrucciones en un programa típico de C++ son instrucciones de expresión, tales como asignaciones o llamadas de función.

Una instrucción de expresión sin una expresión se llama una instrucción nula. Se usa frecuentemente para proporcionar un cuerpo vacío a un bucle for o while. También puede ser usada para acarrear una etiqueta al final de una instrucción compuesta.

[editar] Instrucciones compuestas

Las instrucciones compuestas o bloques son secuencias de instrucciones entre llaves. Agrupan una secuencia de instrucciones en una sola instrucción.

atrib(opcional) { instrucción...(opcional) } (1)

Cuando se espera una instrucción, pero necesitan ejecutarse múltiples instrucciones en secuencia (por ejemplo, en una instrucción if o en un bucle), puede usarse una instrucción compuesta:

if (x > 5)          // inicio de la instrucción if
{                   // inicio de bloque
    int n = 1;      // instrucción de declaración
    std::cout << n; // instrucción de expresión
}                   // fin de bloque, fin de la instrucción if

Cada instrucción compuesta introduce su propio ámbito de bloque; las variables declaradas dentro de un bloque se destruyen en el punto de la llave que cierra, en orden inverso:

int main()
{ // inicio de bloque externo
    {                                // inicio de bloque interno
        std::ofstream f("prueba.txt"); // instrucción de declaración
        f << "abc\n";                // instrucción de expresión
    }                                // fin de bloque interno: f se vacía y se cierra
    std::ifstream f("prueba.txt");  // instrucción de declaración
    std::string str; // instrucción de declaración
    f >> str; // instrucción de expresión
} // fin de bloque externo, str se destruye,f se cierra

[editar] Instrucciones de selección

Las instrucciones de selección escogen de entre varios flujos de control.

atrib(opcional) if constexpr(opcional) (desde C++17) ( instrucción-de-inicialización(opcional) (desde C++17) condición ) instrucción (1)
atrib(opcional) if constexpr(opcional) (desde C++17) ( instrucción-de-inicialización(opcional) (desde C++17) condición ) instrucción else instrucción (2)
atrib(opcional) switch ( instrucción-de-inicialización(opcional) (desde C++17) condición ) instrucción (3)
atrib(opcional) if !(opcional) consteval instrucción-compuesta (4) (desde C++23)
atrib(opcional) if !(opcional) consteval instrucción-compuesta else instrucción (5) (desde C++23)
1) instrucción if;
2) instrucción if con cláusula else;
3) instrucción switch.
4) instrucción consteval if;
5) instrucción consteval if con cláusula else.

[editar] Instrucciones de iteración

Las instrucciones de iteración ejecutan repetidamente algún código.

atrib(opcional) while ( condición ) instrucción (1)
atrib(opcional) do instrucción while ( expresión ) ; (2)
atrib(opcional) for ( instrucción-de-inicialización condición(opcional) ; expresión(opcional) ) instrucción (3)
atrib(opcional) for ( decl-rango-for : inicialización-rango-for ) instrucción (4) (desde C++11)
1) bucle while;
2) bucle do-while;
3) bucle for;

[editar] Instrucciones de salto

Las intrucciones de salto transfieren el control de flujo incondicionalmente.

atrib(opcional) break ; (1)
atrib(opcional) continue ; (2)
atrib(opcional) return expresión(opcional) ; (3)
atrib(opcional) return lista-de-inicializadores-entre-llaves ; (4) (desde C++11)
atrib(opcional) goto identificador ; (5)
1) instrucción break;
2) instruccióncontinue;
3) instrucción return con una expresión opcional;
4) instrucción return utilizando inicialización de lista;
5) instrucción goto.

Nota: para todas las instrucciones de salto, transferencia fuera de un bucle, fuera de un bloque o de vuelta después de una variable inicializada con duración de almacenamiento automática, implica la destrucción de objetos con duración de almacenamiento automática que se encuentran en ámbito en el punto del cual se inició la transferencia, pero no en el punto al que se transfirió. Si múltiples objetos fueron inicializados, el orden de destrucción es el inverso del orden de inicialización.

[editar] Instrucciones de declaración

Las instrucciones de declaración introducen uno o más identificadores dentro de un bloque.

declaración-de-bloque (1)
1) Véase declaraciones e inicialización para más detalles.

[editar] Bloques try

Los bloques try proporcionan la habilidad de capturar excepciones lanzadas cuando se ejecutan otras instrucciones.

atrib(opcional) try instrucción-compuesta sec-de-controladores (1)
1) Véase try/catch para más detalles.


Bloques atómicos y sincronizados

Los bloques atómicos y sincronizados se utilizan para implementar memoria transaccional.

synchronized instrucción-compuesta (1) (TM TS)
atomic_noexcept instrucción-compuesta (2) (TM TS)
atomic_cancel instrucción-compuesta (3) (TM TS)
atomic_commit instrucción-compuesta (4) (TM TS)
1) bloque sincronizado, ejecutado en un orden total sencillo con todos los bloques sincronizados;
2) bloque atómico que aborta cuando hay excepciones;
3) bloque atómico que revierte cuando hay excepciones;
4) bloque atómico que consolida cuando hay excepciones.
(TM TS)

[editar] Véase también

Documentación de C para Instrucciones