Instrucciones
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:
try
;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) | ||||||||
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) | |||||||
[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) | |||||||
[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) | ||||||||
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) | ||||||||
[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) | ||||||||
Bloques atómicos y sincronizadosLos bloques atómicos y sincronizados se utilizan para implementar memoria transaccional.
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
|