Pergunta

Leitura isto Artigo da Wikipedia apontado por um dos repetições para a seguinte pergunta:

Construtor de cópia C ++, temporários e semântica de copiar

Eu me deparei com esta linha

Dependendo do compilador e das configurações do compilador, o programa resultante pode exibir qualquer uma das seguintes saídas:

Isso não se qualifica para o comportamento indefinido? Eu sei que o artigo diz Depending on the compiler and settings Mas eu só quero limpar isso.

Foi útil?

Solução

Não, não é um comportamento indefinido. O comportamento indefinido possui uma definição específica no padrão (principalmente: "comportamento, como pode surgir após o uso de uma construção errônea do programa ou dados errôneos, para os quais esse padrão internacional não impõe requisitos.") Nesse caso, o comportamento não é especificado, mas não indefinido.

A diferença é que qualquer execução de qualquer coisa com comportamento indefinido torna todo o comportamento do seu programa indefinido (ou seja, tudo pode acontecer). Com esse comportamento não especificado em particular, apenas uma das duas coisas pode acontecer: ou o construtor de cópias é executado ou não.

Outras dicas

Não. O comportamento é definido como uma das saídas da lista. O comportamento indefinido inclui demônios voando para fora do seu nariz.

Ver: Demônios nasais

comportamento indefinido é bem diferente de implementação comportamento definido, que é o que está envolvido aqui.

Depende do que você quer dizer com indefinido. Acredito que os outros disseram aqui - pela definição que o documento de padrões usa. Mas também sei que quando alguém diz "isso ou aquilo, não estou lhe dizendo qual" penso nisso como comportamento indefinido.

Porém, não é grande coisa, pois nunca deve causar um erro. Quando você define certos métodos, espera -se que você os defina seguindo convenções específicas - é um tipo de contrato implícito entre você, o compilador e as pessoas que usarão e manterão seu código.

Nesse caso, se você obtém uma constituição de cópia etc ou o comportamento otimizado, espera -se que o efeito seja o mesmo - o chamador recebe o valor desejado. Se o seu construtor de cópias estiver imprimindo "Hello World!" Ou possui outros efeitos colaterais inadequados, ele não está implementando o comportamento esperado para um construtor; portanto, a falha é sua por quebrar o contrato.

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