Pergunta

Eu tenho uma aula com um bool membro de dados que não é inicializado pelo construtor. Se eu fizer

cout << x.myBoolDataMember;

Onde x é um objeto desta classe em que o bool não foi inicializado, às vezes recebo um número aleatório em vez de 0 ou 1. (estou usando gcc.) Esse comportamento é compatível com o Standard?

Foi útil?

Solução

Esse comportamento é compatível com o padrão?

Sim! Usando valores de lixo (não inicializados) em seu código chama Comportamento indefinido

Outras dicas

Sim. Uma variável não inicializada pode ter qualquer valor.

Assim que o operador "<<" não verificar o BOOL, esse comportamento está correto.
O problema aqui está oculto no próprio bool: o programa usa mais de um bit para armazenar o bool. Isso depende da implementação. Às vezes, apenas um bit pode ser usado para armazenar o bool.
Às vezes mais, e é esse caso.

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