TransWikia.com

Inicialización: corchetes { }, asignación =, y otras formas

Stack Overflow en español Asked by Federico Choy on August 26, 2021

¿ Los corchetes { ... } representan lo mismo que el operador de asignación = ?

  • Si la respuesta es si, ¿Cuando debería usarlos?

  • Si la respuesta es no, ¿ Que representan ?

Por ejemplo, en este código:

#include <iostream>
 
int main()
{
    int &&rref{ 5 }; //¿que representan los corchetes? 
    rref = 10;
    std::cout << rref << 'n';
 
    return 0;
}

One Answer

Los corchetes { ... } representan lo mismo que = ?

No.

El tema de la inicialización en C++ es bastante amplio, como podemos observar en su documentación (en inglés):

  • Value initialization

    Esta es la inicialización realizada cuando una variable se construye con un inicializador vacío.

    Clase instancia{ };
    Clase{ };
    new Clase{ };
    
  • Direct initialization

    Inicializa un objeto a partir de un conjunto explícito de argumentos de constructor.

    Clase instancie { arg };
    
  • List initialization

    Inicializa un objeto desde una lista-de-inicialización.

    Clase instancia { arg1, arg2, ... };
    Clase { arg1, arg2, ... };
    new Clase { arg1, arg2, ... };
    Clase { Clase variable-miembro { arg1, arg2, ... }; };
    Clase instance = { arg1, arg2, ... };
    función( { arg1, arg2, ... } );
    return { arg1, arg2, ... };
    instancia[ { arg1, arg2, ... } ];
    instancia = { arg1, arg2, ... };
    Clase( { arg1, arg2, ... } );
    Clase { Clase variable-miembro = { arg1, arg2, ... }; };
    
  • Aggregate initialization (ver aquí)

    Inicializa un agregado desde una lista-de-inicialización.

    Clase instancia = { arg1, arg2, ... };
    Clase instance { arg1, arg2, ... };
    Clase instancia = { .designator = arg1 , .designator { arg2 } ... }; (C++20)
    Clase instancia { .designator = arg1 , .designator { arg2 } ... }; (C++20)
    Clase instancia( arg1, arg2, ... ); (c++20)
    

Como habrás observado, hay distintas formas de inicialización que comparten sintaxis; el empleo de una u otra es automático por parte del compilador, y depende del tipo de la instancia a inicializar. Es un tema bastante extenso.

En el código que muestras, estás declarando una variable rref como una referencia de lado derecho, y el compilador, debido al tipo utilizado (int) la está inicializando utilizando la Direct initialization.

Correct answer by Trauma on August 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP