"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O retorno de uma variável local em C++ utiliza a otimização de valor de retorno nomeado (NRVO) para evitar a construção e destruição de cópias?

O retorno de uma variável local em C++ utiliza a otimização de valor de retorno nomeado (NRVO) para evitar a construção e destruição de cópias?

Publicado em 2024-11-11
Navegar:896

Does Returning a Local Variable in C   Utilize Named Return Value Optimization (NRVO) to Avoid Copy Construction and Destruction?

O retorno de uma variável local retorna uma cópia e destrói o original (NRVO)?

Introdução:
A questão examina o comportamento de retornar uma variável local em C . Especificamente, ele explora se o objeto retornado é uma cópia ou o objeto original e como isso impacta a destruição da variável local.

Otimização do valor de retorno (NRVO):
Com NRVO (nomeado otimização do valor de retorno) habilitado, o compilador otimiza a instrução de retorno para evitar construção de cópia desnecessária ou destruição da variável local. Ele consegue isso construindo diretamente o objeto de retorno no armazenamento de destino, eliminando a sobrecarga de cópias ou movimentações intermediárias. O NRVO se aplica quando condições específicas são atendidas, como a variável local ter duração de armazenamento automática e ser do mesmo tipo que o tipo de retorno.

Exemplo com NRVO ativado:
Considere o seguinte código:

class Test {
public:
    Test(int p) { std::cout 

Com NRVO habilitado, a saída será:

Constructor called
Destructor called

Nesse caso, NRVO otimiza a instrução de retorno e constrói o objeto o diretamente no armazenamento para a variável local t. O construtor é chamado uma vez e apenas um destruidor é chamado para o objeto o.

Exemplo com NRVO desabilitado:
No entanto, NRVO pode ser desabilitado usando o -fno-elide- sinalizador do compilador de construtores. Sem NRVO, o compilador executará explicitamente as etapas de construção e destruição da cópia.

Constructor called
Constructor called
Destructor called
Destructor called

Neste caso, o construtor é chamado duas vezes (para a variável local t e o objeto de retorno o). Além disso, tanto a variável local t quanto o objeto de retorno o são destruídos separadamente.

Conclusão:
O comportamento de retornar uma variável local depende se o NRVO está habilitado ou desabilitado. Com o NRVO habilitado, a variável local é otimizada e o construtor e o destruidor são chamados apenas uma vez para o objeto de retorno. Sem o NRVO, as etapas de construção e destruição da cópia são executadas explicitamente, invocando potencialmente o construtor e o destruidor várias vezes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3