Pergunta

dizer que tenho uma classe:

class A
{
 public:
 A() {}
};

e uma função:

void x(const A & s) {}

e eu faço:

x(A());

poderia alguém por favor me explicar as regras relativas ao passar objetos temporários por referência? Em termos do que o compilador permite, onde você precisa const, se uma cópia implícita acontece, etc. De brincar, parece que você precisa da const que faz sentido, mas existe uma regra formal sobre tudo isso?

Obrigado!

Foi útil?

Solução

Há uma regra formal - o padrão C ++ (seção 13.3.3.1.4 se você estiver interessado) afirma que uma lata temporária só pode ser ligado a uma referência const - se você tentar usar uma referência não-const o compilador deve marcar isto como um erro.

Outras dicas

Herb Sutter faz um bom trabalho explicando-o aqui: http://www.gotw.ca /gotw/081.htm

x () tem de tomar um const referência a um Um temporária, ou x () deve ter um A por valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top