Use a palavra-chave const com ponteiros em C++

Jinku Hu 12 outubro 2023
  1. Use a palavra-chave const para denotar objetos imutáveis ​​em C++
  2. Usando a palavra-chave const com tipos de ponteiro em C++
Use a palavra-chave const com ponteiros 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;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ Const