Pergunta

Em C ++, a assinatura de uma função depende em parte se é ou não const. Isso significa que uma classe pode ter duas funções de membro com assinaturas idênticas, exceto que uma é const e a outra não. Se você tiver uma classe como essa, o compilador decidirá qual função chama com base no objeto que você chama: se for uma instância const da classe, a versão const da função será chamada; Se o objeto não for const, a outra versão será chamada.

Em que circunstâncias você pode querer aproveitar esse recurso?

Foi útil?

Solução

Isso realmente só faz sentido quando a função do membro retorna um ponteiro ou uma referência a um membro de dados da sua classe (ou um membro de um membro, ou um membro de um membro de um membro, ... etc.). Geralmente, retornando ponteiros ou referências que não são consagrados aos membros de dados são desaprovados, mas às vezes é razoável ou simplesmente muito conveniente (por exemplo, operador [] []). Nesses casos, você fornece uma versões const e não consagras do getter. Dessa forma, a decisão sobre se o objeto pode ou não ser modificado repousa com a função usando-a, que tem a opção de declará-lo const ou não-consalte.

Outras dicas

Está lá para que você possa fazer o compilador aplicar se você retorna um objeto const ou um regular e ainda mantenha a mesma assinatura do método. Há uma explicação aprofundada em Correção constante.

Você pode usá -lo para decidir se deve ou não retornar uma referência const a um objeto ou não. Os contêineres do STL usam uma função const sobrecarregada () e end () para decidir se deve retornar um const_iterator ou um iterador normal.

Dê uma olhada no comportamento de std :: map :: operator []. A versão const lança um erro se você tentar fazer referência a uma tecla inválida, mas a versão não consaginada faz uma inserção. O comportamento de inserção é muito mais útil do que ter que usar o std :: map :: insert (e fará uma substituição, além disso), mas não pode funcionar para um mapa const.

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