"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 > Você pode atribuir a um rvalue do tipo de classe em C ++?

Você pode atribuir a um rvalue do tipo de classe em C ++?

Postado em 2025-03-24
Navegar:653

 Can You Assign to an Rvalue of Class Type in C  ?

atribuição para a classe Type RValues ​​

Visão geral

Na linguagem de programação C, Rvalues ​​(valores à direita) não podem ser usados ​​como Lvalues ​​(valores à esquerda). No entanto, existem exceções a esta regra, conforme ilustrado pelo seguinte código:

class Y {
public:
    explicit Y(size_t num = 0) {}
};

int main() {
    Y(1) = Y(0); // WHAT?!?
    return 0;
}

surpreendentemente, esse código compila com sucesso, mesmo que o objeto retornado pelo construtor y (1) seja um rvalue. Este artigo explora as razões por trás desse comportamento inesperado. Para classes que não definem explicitamente um operador de atribuição, o compilador gera um operador de atribuição padrão. Esse operador padrão é uma função de membro que requer uma referência a um objeto da mesma classe que seu parâmetro. Isso significa que ele pode ser aplicado a LValues ​​(objetos referenciados) e rvalues ​​(objetos não referenciados). Esse objeto temporário é destruído automaticamente no final da declaração em que foi criado. No entanto, no caso em que o construtor retorna um valor do tipo de classe, o operador de atribuição sintetizado pode prolongar a vida útil do objeto temporário. é o açúcar sintático para o seguinte código:

y (1) .operator = (y (0));

Como estabelecemos, o operador de atribuição sintetizado = para a classe y é uma função não-Contrista, o que pode ser aplicado a um Rvalue. Portanto, o compilador pode interpretar a declaração de atribuição como uma atribuição ao objeto temporário criado pelo construtor y (1).

Conclusão
Y& Y::operator=(const Y& other);
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