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

Jinku Hu 2023年1月30日 2021年6月28日
  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;
}
Author: 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

相关文章 - C++ Const