es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo llamar a un constructor con un inicializador de lista vacío en c++17?

Considere este código:

class Foo
{
public:
    Foo(){cout<<"vacio"<<endl;}></endl;}><int>){cout<<"lista_init"<<endl;}
};

int main()
{
    foo(); // vacio
    foo{}; // vacio
    foo({}); // lista_init para c++14, vacio para c++17
}

me pregunto por qué se comportan de manera diferente entre c++14 y c++17, y cómo construir un foo con una initializer_list vacía en c++17. };=”” int=”” main()=”” {=”” foo();=”” vacio=”” foo{};=”” vacio=”” foo({});=”” lista_init=”” para=”” c++14,=”” vacio=”” para=”” c++17=”” }=”” “`=”” me=”” pregunto=”” por=”” qué=”” se=”” comportan=”” de=”” manera=”” diferente=”” entre=”” c++14=”” y=”” c++17,=”” y=”” cómo=”” construir=”” un=”” foo=”” con=”” una=”” initializer_list=”” vacía=”” en=””></endl;}
};

int main()
{
foo(); // vacio
foo{}; // vacio
foo({}); // lista_init para c++14, vacio para c++17
}
“`

me pregunto por qué se comportan de manera diferente entre c++14 y c++17, y cómo construir un foo con una initializer_list vacía en c++17.>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En C++14, el constructor Foo(initializer_list<int>) se llama con un initializer_list vacío cuando se utiliza Foo({}). Sin embargo, en C++17, esta sintaxis es ambigua y también podría significar una llamada de constructor predeterminado con un std::initializer_list vacío. Por lo tanto, en C++17, se pasa un initializer_list vacío al constructor predeterminado Foo().

    Para construir un Foo con un initializer_list vacío en C++17, puedes usar el siguiente código:

    Foo(std::initializer_list<int>{});
    

    Esto llama explícitamente al constructor con un argumento std::initializer_list<int> vacío.

Comments are closed.