又广又深! 关于C++中的const关键字使用方法 史上最详细!

1.常量变量

const 可以用于定义不可修改的变量。这样的变量在初始化后不能再被修改。

const int MAX_VALUE = 100;
MAX_VALUE = 200;  // 错误:MAX_VALUE 是只读变量

当你尝试修改 const 变量时,编译器会报错。

2.常量指针和指针常量(这里非常容易混淆 须仔细思考辨别)

const 可以用来修饰指针和指向的数据,具体用法有以下几种:

如何快速辨别指针常量和常量指针

  • const* 之前:表示指向的数据是常量。
  • const* 之后:表示指针本身是常量。

  • 指针常量(指针本身可变,但不能修改它指向的数据):

const int *ptr;
int value = 10;
ptr = &value;  // 合法
*ptr = 20;     // 错误:ptr 指向的值是 const 的

 ptr 可以指向不同的地址,但不能修改指向的数据内容。 

  • 常量指针(指针本身是常量,不能改变它指向的地址,但可以修改它指向的数据):

int value1 = 10;
int value2 = 20;
int *const ptr = &value1;
*ptr = 30;    // 合法:可以修改 ptr 指向的数据
ptr = &value2; // 错误:ptr 是 const,不能改变指向

  • 指向常量数据的常量指针(指针和它指向的数据都不可修改):

const int *const ptr = &value;
*ptr = 40;    // 错误:不能修改 ptr 指向的数据
ptr = &value2; // 错误:ptr 也是 const 的,不能改变指向

3.常量引用

引用本身不能修改其绑定的对象,但可以修改其绑定对象的值,通过 const 引用,我们将无法修改它所引用的对象const 引用禁止通过它修改被引用的对象,从而提供了数据保护。

int value = 10;
const int &ref = value;
ref = 20;    // 错误:不能通过 const 引用修改值

其次const 引用还有个特别的用法,允许绑定临时对象(普通引用则不行);

const int &ref = 42;  // 合法:可以绑定到临时对象

4.在类中的用法

在类中,const 可以用来修饰成员函数,表示这个函数不能修改对象的成员变量。

class MyClass {
public:
    int getValue() const {
        return value;
    }
    
    void setValue(int newValue) {
        value = newValue;
    }

private:
    int value;
};
  • getValue 函数是 const 的,不能修改 MyClass 的任何成员变量。
  • setValue 函数可以修改 value

但也不是一定不能修改,当成员变量前声明了mutable关键字时,这个成员变量就可以在被const修饰的函数中修改,这里就不添加代码演示了,将上面代码中 int value改成 mutable int value即可,但是不推荐使用 

使用const关键字实例化类对象后,被实例化的类对象只能调用类中的常量成员函数,且被初始化后不可被修改,常量成员函数可以被重载,普通实例化对象优先调用普通成员函数 ,初始化后可随意修改

class Test {
public:
	Test(int id_, int age_) {
		this->id = id_;
		this->age = age_;
	}
	
	void show() {
		std::cout << this->id << std::endl;
		std::cout << this->age << std::endl;
	}
	
	void show()const {
		std::cout << this->id << std::endl;
		std::cout << this->age << std::endl;
	}
public:
	int id;
	int age;
};

void test()
{
	const Test test01(123, 345);
    test01.id=666;//错误,被初始化后不能再修改
	test01.show();//调用且只能调用常量成员函数
	

	Test test02(123,456);
	test02.id = 111;//可以随意修改
	test02.show();//优先调用普通成员函数
}

5.常量参数

对于按值传递的常量参数const 对于按值传递的参数没有实际意义,因为传递的是参数的副本。

void foo(const int value) {
    // value 是一个本地副本,不能修改
}

 对于按引用或指针传递的常量参数const 可以防止函数修改传入的对象或数据。

void foo(const std::string &str) {
    // 不能修改 str
}

使用 const 引用作为参数有助于避免复制大对象,提高效率。

6.常量返回值

函数可以返回 const 值,防止调用者修改返回值。例如:

const std::string& getName() const {
    return name;
}

总结

  • const 在 C++ 中用来表示不变性,可以增强代码的安全性和清晰度。
  • 理解 const 的作用及其在不同上下文中的使用,对于编写更高质量的 C++ 代码至关重要。
  • 常量成员函数、常量参数和常量返回值是常见的 const 使用场景,有助于防止意外修改对象或数据
  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值