📜  C ++中的Const关键字(1)

📅  最后修改于: 2023-12-03 14:59:37.080000             🧑  作者: Mango

C++中的Const关键字

在C++中,const是一个关键字,用于表示一个变量或对象是不可修改的。同时,const也可以用于函数参数、函数返回值、成员函数等。

1. 定义和使用

定义一个const变量可以通过在变量前加const关键字来实现:

const int i = 10; //定义一个常量i为10

这里的const关键字告诉编译器,变量i是不可修改的。试图修改变量i的操作将会导致编译错误。

const修饰的变量,不仅可以是内置类型,也可以是自定义类型:

class MyClass {
public:
	void SetX(int x) const { _x = x; } //不合法
	int GetX() const { return _x; } //合法

private:
	int _x;
};

const MyClass obj; //定义一个不可更改的对象obj

obj.GetX(); //合法
obj.SetX(10); //不合法:void MyClass::SetX(int) const" (隐式转换类型没有合适的可调用函数)

这里的const关键字告诉编译器,成员函数无法修改对象的状态。试图修改对象的状态的操作将会导致编译错误。

2. 指向常量的指针和常量指针

指向常量的指针和常量指针是两个不同的概念。

指向常量的指针可以通过以下方式定义:

const int* p; //指向常量的指针

p是一个指向常量的指针,指针所指向的内存单元是不可修改的,但是指针本身可以被修改。例如:

int x = 10;
const int* p = &x; //p指向的内存单元是只读的

这里,指针p指向变量x,但是无法通过指针p修改变量x的值:

*p = 20; //不合法

而常量指针可以通过以下方式定义:

int x = 10;
int* const p = &x; //常量指针

p是一个常量指针,指针本身是不可修改的,但是指针所指向的内存单元是可修改的,例如:

int x = 10;
int* const p = &x; //p指向变量x,并且p本身是不可修改的
*p = 20;

这里,通过指针p修改了变量x的值。

3. const修饰函数参数

在函数参数中使用const可以使得函数不会对参数进行修改。例如:

void DoSomething(const int x) //x是const int类型的参数
{
    //do something
}

void DoSomething(const MyClass& obj) //obj是const MyClass类型的引用参数
{
    //do something
}

这里的const告诉函数,函数不会修改参数x或者obj

4. const修饰函数返回值

在函数返回值中使用const可以防止返回值被修改。例如:

const MyClass& GetMyClass()
{
    static MyClass obj;
    return obj;
}

这里的const告诉编译器,返回值是不可修改的。

5. const修饰成员函数

在成员函数中使用const可以使得函数不会修改对象的状态。例如:

class MyClass {
public:
    void DoSomething() //普通的成员函数
    {
        _x = 1; //可以修改对象的状态
    }

    int GetX() const //const成员函数
    {
        return _x; //不会修改对象的状态
    }

private:
    int _x;
};

这里的const告诉编译器,成员函数不会修改对象的状态。

6. 总结

const关键字可以用于变量、指针、函数参数、函数返回值、成员函数等不同的场合,可以有效地保护程序的安全性和稳定性。在开发中合理使用const关键字,有利于提高代码的可读性和可维护性。