Permitindo vinculação de referência não const a Rvalue: uma anomalia do VS2010
O padrão C proíbe estritamente a vinculação de referências não const a rvalues. No entanto, em uma anomalia peculiar, o Visual Studio 2010 (SP1) compila o seguinte código sem erros ou avisos:
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
Discrepâncias de comportamento do compilador
Em contraste, outros compiladores exibem um comportamento mais rigoroso:
Explicação da anomalia do VS2010
Esse comportamento incomum no VS2010 decorre de uma extensão de compilador conhecida. Ao contrário do GCC e do Visual Studio 2008, o VS2010 permite que referências não const sejam vinculadas a rvalues em certos casos, como quando o rvalue é gerado por uma função que retorna um objeto temporário.
Embora esta extensão desafie o padrão, provavelmente foi implementado por conveniência. No entanto, pode levar a um comportamento indefinido se o rvalue for modificado após a referência ser vinculada.
Consequências e recomendações
Esta extensão pode introduzir bugs sutis no código que depende na adesão adequada ao padrão C. Portanto, é altamente recomendável evitar vincular referências não const a rvalues, mesmo no VS2010. Em vez disso, sempre use referências const ao vincular a rvalues, conforme pretendido pelo padrão.
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