常量
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
常量是一个固定值的表达式。程序运行时不能更改。
使用 const 关键字来定义一个常量变量。
const int x = 42;
所有常量变量在创建时都必须初始化。

const double var = 3.4
与内置数据类型一样,我们可以使用 const 关键字使类对象保持不变。
const MyClass obj;
所有 const 变量在创建时都必须被初始化。在类的情况下,这个初始化是通过构造函数完成的。
如果一个类没有使用参数化构造函数进行初始化,则必须提供一个公共的默认构造函数 - 如果没有提供公共的默认构造函数,则会发生编译错误。
一旦 const 类对象已经通过构造函数被初始化,就不能修改对象的成员变量。这包括直接更改公共成员变量和调用成员变量值的成员函数。
当你用 const 来声明一个对象的时候,你不能在对象的生命周期中改变它的数据成员。
const int a = 7;
int b = a; // 正确
a = 8; // 错误,不能改变

Student st;
st.printAfe()
常量对象
只有非 const 对象可以调用非 const 函数。
常量对象不能调用常规函数。因此,对于一个常量的对象来说,你需要一个常量函数。
要将函数指定为 const 成员,const 关键字必须在函数原型之后,在其参数的右括号之外。
对于在类定义之外定义的 const 成员函数,必须在函数原型和定义上使用 const 关键字。
例如:
MyClass.h
class MyClass
{
public:
void myPrint() const;
};
MyClass.cpp
#include "MyClass.h"
#include <iostream>
using namespace std;
void MyClass::myPrint() const {
cout <<"Hello Rhz"<<endl;
}
现在 myPrint() 函数是一个常量成员函数。因此,它可以被我们常量对象所调用:
int main() {
const MyClass obj;
obj.myPrint();
}
// 输出 "Hello rhz"

class Student{
public:
void printAge() const;
}
尝试从常量对象调用常规函数会导致错误。
另外,当任何 const 成员函数试图改变成员变量或调用 非const 成员函数时,会产生编译器错误。
定义常量对象和函数可确保相应的数据成员不会被意外修改。

文章评论