Use a palavra-chave const com ponteiros em C++
-
Use a palavra-chave
const
para denotar objetos imutáveis em C++ -
Usando a palavra-chave
const
com tipos de ponteiro em C++
Este artigo mostrará métodos de como usar a palavra-chave const
com ponteiros em C++.
Use a palavra-chave const
para denotar objetos imutáveis em C++
Geralmente, a palavra-chave const
é usada para especificar que o objeto dado deve ser imutável durante a execução do programa. A prática de nomear os valores constantes ajuda a manter a base de código mais ajustável e fácil de manter em comparação com a especificação direta de valores literais. Além disso, a palavra-chave const
é altamente utilizada pelas interfaces de função para indicar que os parâmetros fornecidos são somente leitura e ajudam a mitigar os erros de tempo de execução para os de tempo de compilação.
Declaramos um objeto const
incluindo a palavra-chave antes do especificador de tipo, conforme mostrado no seguinte trecho de código. Aqui, você observará que a variável s1
é criada como a string
somente leitura, e os objetos const
não podem ser atribuídos a um valor diferente. Portanto, eles devem ser inicializados durante a declaração. Se tentarmos modificar o objeto const
, o erro do compilador é lançado.
#include <iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
const string s1("Hello");
string s2("Hello");
// s1 += "Joe"; // Error
s2 += "Joe";
cout << "s1: " << s1 << endl;
cout << "s2: " << s2 << endl;
return EXIT_SUCCESS;
}
Resultado:
s1 : Hello s2 : HelloJoe
Usando a palavra-chave const
com tipos de ponteiro em C++
Observe que, quando declaramos um objeto ponteiro, normalmente incluímos também o tipo do objeto apontado. Portanto, torna-se complicado especificar apenas uma palavra-chave const
como um prefixo para a instrução de declaração. Conseqüentemente, precisamos ter especificadores const
separados para o ponteiro e o próprio objeto apontado.
Geralmente, teríamos três combinações desses especificadores: a primeira em que o ponteiro e o objeto não são modificáveis; a segunda combinação em que o ponteiro não pode ser reatribuído, mas o próprio objeto é mutável; finalmente, temos a variante em que o ponteiro é mutável e o objeto não.
Todas as três variantes são declaradas no próximo trecho de código para demonstrar a notação de sintaxe correspondente. Às vezes, é sugerido ler essas declarações do especificador mais à direita para a esquerda, mas você também pode se lembrar que o declarador *const
é usado para indicar os ponteiros imutáveis.
#include <iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
string s2("Hello");
const string *const s3 = &s2; // both are non-mutable
s3 = &s2; // Error
*s3 = s2; // Error
const string *s4 = &s2; // only string object is non-mutable
s4 = s3;
*s4 = s2; // Error
string *const s5 = &s2; // only pointer is non-mutable
s5 = s3; // Error
*s5 = s2;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook