Tipo de ponteiro this
O Este tipo do ponteiro pode ser modificado na declaração da função, o const e volatile palavras-chave.Para declarar uma função como tendo os atributos de um ou mais dessas palavras-chave, adicione as palavras-chave após a lista de argumentos de função.
Considere este exemplo:
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
O código anterior declara uma função de membro, X, no qual o Este ponteiro é tratado como um const ponteiro para uma const objeto.Combinações de VC-mod-list podem ser usadas, mas elas sempre modificar o objeto apontado pelo Este, e não o Este ponteiro propriamente dito.Portanto, a declaração a seguir declara a função X; o Este ponteiro é uma const o ponteiro para um const objeto:
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
O tipo de Este um membro função é descrita pela seguinte sintaxe, onde VC-qualificador-list é determinada do Declarador de membro de funções e pode ser const ou volátil (ou ambos), e tipo de classe é o nome da classe:
tipo de classe [lista de qualificador cv***constesse**
Em outras palavras, Este é sempre um ponteiro const; ele não pode ser reatribuído.O const ou volatile qualificadores usados na declaração da função de membro aplicam-se a instância da classe apontada por Este no escopo dessa função.
A tabela a seguir explica mais sobre como esses modificadores funcionam.
Semântica deste modificadores
Modificador |
Significado |
---|---|
Const |
Não é possível alterar os dados de membro. não é possível invocar funções de membro que não são const. |
volatile |
Dados de membro são carregados da memória de cada vez que ele é acessado; Desativa determinadas otimizações. |
É um erro para passar um const o objeto para uma função de membro que não é const.Da mesma forma, é um erro para passar um volatile o objeto para uma função de membro que não é volatile.
Funções de membro declaradas como const não é possível alterar os dados do membro — em tais funções, o Este ponteiro é um ponteiro para uma const objeto.
Observação |
---|
Construtores e destruidores não podem ser declarados como const ou volatile.No entanto, podem, ser invocado na const ou volatile objetos. |