在 C++ 中使用带有指针的 const 关键字

Jinku Hu 2023年10月12日
  1. 使用 const 关键字表示 C++ 中的不可变对象
  2. 在 C++ 指针类型中使用 const 关键字
在 C++ 中使用带有指针的 const 关键字

本文将向你展示如何在 C++ 中使用带有指针的 const 关键字的方法。

使用 const 关键字表示 C++ 中的不可变对象

通常,const 关键字用于指定给定的对象在整个程序执行过程中是不可变的。与直接指定字面值相比,命名常量值的做法有助于保持代码库的可调整性和易于维护性。此外,函数接口高度利用 const 关键字来指示给定的参数是只读的,并有助于将运行时错误减少到编译时错误。

我们通过在类型说明符之前包含关键字来声明一个 const 对象,如下面的代码片段所示。在这里,你将观察到 s1 变量被创建为只读 string,并且 const 对象不能被分配不同的值。因此,它们必须在声明期间进行初始化。如果我们尝试修改 const 对象,则会抛出编译器错误。

#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;
}

输出:

s1: Hello
s2: HelloJoe

在 C++ 指针类型中使用 const 关键字

请注意,当我们声明一个指针对象时,我们通常也会包含指向对象的类型。因此,仅指定一个 const 关键字作为声明语句的前缀变得很棘手。因此,我们需要为指针和指向对象本身设置单独的 const 说明符。

通常,我们会有这些说明符的三种组合:第一种是指针和对象都是不可修改的;指针不能重新分配的第二种组合,但对象本身是可变的;最后,我们有了指针可变而对象不可变的变体。

所有三个变体都在下一个代码片段中声明,以演示相应的语法表示法。有时,建议从最右边的说明符到左边阅读这些声明,但你也可以记住 *const 声明符用于指示不可变指针。

#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;
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Const