Construtor de movimento explícito
Tentando compilar o seguinte código:
struct Foo
{
explicit Foo ( void ) { }
explicit Foo ( Foo&& rhs ) { }
};
Foo bar ( void )
{
return Foo();
}
Obtendo o seguinte erro:
chamada para o construtor de cópias excluído implicitamente de 'Foo'
Bem, é óbvio que o copiador é excluído implicitamente.
Questão 1: Por que o compilador precisa do copiador deFoo
? Eu esperava o valor de retorno debar
a ser construído a partir do valorFoo()
com o movedor.
Em seguida, redeclaro o movitor como implícito e tudo é compilado com êxito.
Questão 2: Por que o compilador não precisa mais do copiador quando redeclaro o movedor como implícito?
Questão 3: O queexplicit
palavra-chave significa no contexto de copiar e mover médicos, pois definitivamente significa algo diferente do contexto dos médicos regulares.