在 C++ 中使用带有指针的 const 关键字
Jinku Hu
2023年10月12日
本文将向你展示如何在 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