C++

C++ 知识量:19 - 82 - 316

2.4 const限定符><

const限定符- 2.4.1 -

在C++中,const是一个关键字,它用于限定一个变量或对象的值不能被修改。通过使用const关键字,可以确保一个变量或对象在整个程序执行期间保持其初始值,不会被修改。

下面是一些使用const关键字的示例:

1. 声明一个常量整数:

const int MY_CONST = 10;

在上面的代码中,MY_CONST被声明为一个常量整数,其值为10。由于它被声明为常量,因此不能被修改。

2. 声明一个常量指针:

int myVar = 10;    
const int* ptr = &myVar;

在上面的代码中,ptr是一个指向整数的指针,它指向了myVar。由于ptr被声明为常量指针,它不能被用来修改所指向的值。

3. 声明一个常量引用:

int myVar = 10;    
const int& ref = myVar;

在上面的代码中,ref是一个常量引用,它引用了一个整数变量myVar。由于它是常量引用,因此它不能用来修改所引用的值。

使用const关键字可以帮助确保代码的安全性和稳定性,因为它防止一个变量或对象被意外修改。此外,使用const关键字还可以提高代码的可读性和可维护性。

指向常量的指针- 2.4.2 -

在C++中,指向常量的指针(pointer to constant)是指针变量指向一个常量对象的地址。通过这种指针,可以读取该常量对象的内容,但不能修改它。

下面是一个指向常量的指针的示例:

const int num = 10;    
int* ptr = &num; // 错误,num是常量      
int const* ptr = &num; // 正确,指向常量的指针

在上面的代码中,int const* ptr声明了一个指向整型常量的指针,它指向了变量num的地址。由于num是常量,因此不能通过ptr修改它。但是,可以读取num的值,例如cout << *ptr << endl;将输出10。

注意:指向常量的指针本身也可以被声明为常量指针,即const int* const ptr,这样它就不能被修改了。

顶层const- 2.4.3 -

在C++中,顶层const指的是在声明变量或对象时直接在类型前面加上const关键字,表示这个变量或对象是常量,不能被修改。

例如,下面的代码声明了一个const整型变量:

const int a = 10;

这个变量a是一个常量,它的值不能被修改。如果试图修改a的值,编译器会报错。

除了整型变量,其他类型的变量也可以使用顶层const修饰,例如:

const double b = 3.14;    
const char* str = "hello";    
const std::string s = "world";

这些变量b、str和s都是常量,它们的值不能被修改。

需要注意的是,顶层const只适用于变量和对象,不能用于函数参数或返回值。函数参数和返回值必须通过引用或指针来修饰。

底层const- 2.4.4 -

在C++中,底层const指的是在类或结构体的成员函数中,将const关键字放在函数的参数列表后面,表示该函数不会修改类的任何数据成员。

例如,下面的代码定义了一个名为MyClass的类,其中包含一个底层const成员函数print():

class MyClass {  
public:  
    void print() const {  
        cout << m_data << endl;  
    }  
private:  
    int m_data;  
};

在print()函数中,使用了底层const修饰符,表示该函数不会修改类的任何数据成员,包括m_data。因此,在底层const成员函数中,可以访问类的所有数据成员,但不能修改它们。

需要注意的是,底层const修饰符只适用于成员函数,不能用于类的数据成员或全局变量。

常量表达式- 2.4.5 -

C++中的常量表达式是指在编译时期就能确定的表达式,其值不能被改变。常量表达式通常使用常量或字面值来表达,例如:

const int a = 10; // 定义一个整型常量a,值为10      
const double pi = 3.14159; // 定义一个双精度浮点型常量pi,值为3.14159      
const char* str = "hello"; // 定义一个指向字符串常量的指针str,值为"hello"

除了使用常量或字面值外,常量表达式还可以使用一些常量表达式函数来计算,例如:

const int len = 5;    
const int area = len * 2; // 使用常量表达式计算面积,值为10

需要注意的是,常量表达式的值必须在编译时期就能确定,因此不能使用变量或非常量表达式来表达。同时,由于常量表达式的值不能被改变,因此不能在运行时期修改它们的值。