您的位置:首页 > 科技 > IT业 > C++速览之const

C++速览之const

2024/10/6 16:29:40 来源:https://blog.csdn.net/qq_44114055/article/details/141092057  浏览:    关键词:C++速览之const

const

1、是什么?
在C++中,const 是一种关键字,用于指定常量或表示不可修改

1.1 修饰变量
声明常量:通过在变量声明前加上const关键字,可以将变量声明为常量,即其值不能被修改。

const int x = 5; // 声明一个常量x,其值为5,不可修改

防止意外修改:将变量声明为 const 可以防止意外的修改,提高代码的可靠性和可维护性。

1.2 修饰函数参数
函数参数为只读:将函数参数声明为const表示函数内部不会修改该参数的值。

void func(const int x) {
// x 是只读参数,不可修改
}

1.3 修饰函数返回值
返回值为只读:将函数返回值声明为const表示返回值为只读,不能被修改。

const int getValue() {
return 42;
}

#include <iostream>using namespace std;class A {
private:int num;
public:A() : num(2) {}void set_num() {this->num = 10;}void get_num() const {printf("%d\\n", num);}
};class B {
public:const class A *get() {class A *p = new A();return p;}
};int main() {B b;b.get()->get_num();b.get()->set_num();  // 编译失败,因为返回的对象是const修饰,所以不允许修改成员return 0;
}

1.4 修饰类成员

常量成员变量:在类中使用 const 声明的成员变量是类的常量成员,一旦初始化后就不能修改

常量成员函数:在类中使用 const 修饰的成员函数表示该函数不会修改类的成员变量

class MyClass {
private:const int value;  // 声明一个常量成员变量public:int getValue() const {return value;  // 常量成员函数,不能修改非静态成员变量}
};

1.5 修饰指针

const在 * 右侧:表示指针本身是一个常量,即指针指向的内存地址不能修改。

int x = 5;
int* const ptr = &x;  // ptr 是一个指向整型变量的常量指针
*ptr = 10;  // 可以修改指针指向的值
ptr++;  // 错误,指针本身是一个常量,不能修改指向的地址

const在 * 左边:表示指针指向的值是一个常量,即指针所指向的内存地址的值不能修改。

int x = 5;
const int* ptr = &x;  // ptr 是一个指向常量整型的指针
*ptr = 10;  // 错误,不能修改指针指向的值
ptr++;  // 可以修改指针指向的地址

const在 * 左右都有:表示指针本身是常量,且指针指向的对象也是常量。

const int x = 5;
const int* const ptr = &x;  // ptr 是一个指向常量整型的常量指针
*ptr = 10;  // 错误,不能通过指针修改 x 的值
ptr++;  // 错误,指针本身和指向的对象都是常量


使用 const 的好处:

提高代码的可读性:通过明确标识常量和只读的对象,使代码更易于理解和维护。

防止意外修改:将对象声明为 const 可以防止在代码中无意中修改其值,提高代码的稳定性和可靠性。

编译器优化:编译器可以使用 const 信息进行优化,提高代码的执行效率。

需要注意的是,const 对象必须在声明时进行初始化,并且其值在编译时就确定了,不能在运行时修改

在编写代码时,合理使用 const 可以提高代码的可读性、可靠性和性能。通过将对象声明为 const,可以明确指示其只读特性,并减少意外的修改,从而提高代码的质量和可维护性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com