Mais
O que significa com "const" no final da declaração de função?
Possivel duplicata: Significado de “const” último em uma declaração do método C++?
Eu tenho um livro, onde está escrito algo como:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
O que é que isso significa?
495
3
A "const function", denotado com a palavra-chave
const
após uma declaração de função, faz com que seja um erro de compilação para esta função de classe alterar uma variável membro da classe. Entretanto, a leitura de uma variável de classe está ok dentro da função, mas escrever dentro desta função irá gerar um erro de compilação.Outra maneira de pensar sobre tal "const function" é vendo uma função de classe como uma função normal tomando um 'este' ponteiro implícito. Então um método
int Foo::Bar(int random_arg)
(sem a const no final) resulta em uma função comoint Foo_Bar(Foo* this, int random_arg)
, e uma chamada comoFoo f; f.Bar(4)
corresponderá internamente a algo comoFoo f; Foo_Bar(&f, 4)
. Agora adicionando a const no final (int Foo::Bar(int random_arg) const
) pode então ser entendida como uma declaração com uma const este ponteiro:int Foo_Bar(const Foo* this, int random_arg)
. Como o tipo dethis
em tal caso é const, nenhuma modificação das variáveis de membros é possível.É possível soltar o "const function" restrição de não permitir que a função escreva para qualquer variável de uma classe. Para permitir que algumas variáveis possam ser escritas mesmo quando a função é marcada como "const function" estas variáveis de classe são marcadas com a palavra-chave `mutable'. Assim, se uma variável de classe estiver marcada como mutável, e um "const function" escreve-se a esta variável, então o código compilará de forma limpa e a variável é possível de ser alterada. (C++11)
Como de costume quando se lida com a palavra-chave
const', mudar a localização da palavra-chave const numa instrução C++ tem significados completamente diferentes. A utilização de
constacima só se aplica quando se adiciona
const` ao final da declaração da função após o parêntese.O
const' é um qualificador altamente utilizado em C++: a sintaxe e a ordenação muitas vezes não é simples em combinação com apontadores. Algumas leituras sobre o
constcorreto e a palavra-chave
const`:Constante correcção
O C++ ' const' Declaração: Porquê & Como
O "Bar" é garantido para não alterar o objeto em que está sendo invocado. Veja a seção sobre const-correctness na FAQ C++, por exemplo.
Similar a esta pergunta.
Em essência significa que o método
Bar
não modificará variáveis não mutáveis de membros doFoo
.