Pergunta

O que é melhor:

bool MyClass::someQuery() const;

const bool MyClass::someQuery() const;

Eu tenho usado 'const bool' desde que eu tenho certeza que eu lembro de ouvir que é "o que os ints fazer" (por exemplo, operadores de comparação), mas não consigo encontrar evidências de que em qualquer lugar, principalmente devido ao facto de ser difícil ao Google e Intellisense não ajudar qualquer;?) alguém pode confirmar que

Para mim retornando valores const (este não é apenas sobre bools) faz mais sentido; ele vai evitar temporários sendo modificado, que é quase sempre vai ser um erro do programador. Eu só quero alguma coisa para sustentar isso para que eu possa exaltar retornando valores const aos meus colegas:)

Foi útil?

Solução

Assim que você sabe que está certo, você está apenas após a voz de autoridade? Prevenir modificação acidental de temporários é muito valioso. Em geral, você deve declarar tantas coisas quanto você possivelmente pode const, protege-lo de uma variedade de acidentes e dá as dicas úteis Optimiser.

D'você tem uma cópia de Scott Meyers' "Effective C ++" por aí? Apontá-los no ponto 3 (página 18 na terceira edição);)

Ela dá o exemplo de

class Rational {...};
const Rational operator* (const Rational& lhs, const Rational& rhs );

if( (a * b) = c ) // declaring operator *'s return value const causes error to be caught by compiler

Outras dicas

Este é o caso quando const não agrega valor, mas infla o código e faz o leitor pensar mais. Qual é o ponto deste const? O chamador pode copiar o valor em alguma variável não-const e fazer o que quiser com ele de qualquer maneira.

Note que if((a*b) = c) não irá compilar para tipos built-in de qualquer maneira, por isso é muito relevante aqui se estamos falando de tipos built-in (sua pergunta pede bool) ou tipos definidos pelo usuário.

Para built-in tipos não faz sentido em tudo, por isso não deve ser usado. E para tipos definidos pelo usuário, eu estou no campo de jalf de: E se o autor da chamada quer para modificar o objeto retornado?

Eu não estou convencido de que if((a*b) = c) é como um argumento bom para retornar tipos definidos pelo usuário const, desde que eu não me lembro a última vez que eu vi um compilador não avisar sobre isso.

Para ser um pouco mais específico, apenas "objetos" pode ser const. A definição padrão C ++ da de "objecto" inclui tudo um Ivalue refere-se a ( "tem um nome") e do tipo classe temporários. Um valor de retorno boolean é um rvalue de um tipo não-classe que é por isso que um compilador compatível com os padrões irá simplesmente ignorar "const" neste caso. Como outros já disse, é inútil neste contexto.

Quando você retornar uma referência a uma variável de membro faz sentido fazê-lo const. Aqui você está retornando uma cópia, portanto, não há necessidade de const.

O const modificador é usado apenas para tipos de retorno que são devolvidos por referência (quer como const SomeObject& de referência ou por meio de um ponteiro const SomeObject*), de modo que o chamador não irá ser capaz de modificar o objecto através do referência / apontador. tipos primitivos são devolvidos por valor , o que significa que o chamador recebe um cópia do objeto, não o objeto em si.

Portanto, const não é realmente apropriado para tipos de valor devolvidos. Desde a cópia está fora do controle da função chamada, a função chamada não deve ditar ao chamador que não pode ser alterado.

É completamente não importa. Portanto, o consenso é retornar apenas bool.

A razão que não importa é que você não pode chamar funções de membro não-const de qualquer maneira; bool não é uma classe ou struct.

Como bool vai ser copiado, é o mesmo, para colocar const ou não. Além disso, você vai pode ter alguns problemas Compil.

const tipo de retorno

RESUMO:

O valor de um tipo de retorno que é const declarou não pode ser alterado. este é especialmente útil ao dar um referência para internos de uma classe, mas também pode evitar erros mais raros.

const bool func();
bool f = func();

0 erros, avisos 0. O que você tem feito outra do que a inflação código desnecessário?

Este é um posto antiga, mas acho que vale a pena mencionar que há um caso de canto potencial aqui desde C ++ 11. Embora, como dito por outros, ele vai fazer nenhuma diferença se você usa const bool ou bool como tipo de retorno na maioria dos casos, se você estiver usando C ++ 11 decltype e associados, por exemplo, result_of , você pode declarar uma variável com o mesmo tipo como o valor retorno de alguma função, e assim o const seria realmente ter um efeito neste caso.

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