c++的一些知识

文章介绍了C++中const和mutable修饰符的使用。const用于定义常函数,禁止修改成员变量,但mutable允许在const函数中修改特定变量。在lambda表达式中,值捕获默认为const,需加mutable才能修改。这体现了C++给予程序员高度灵活性的特点。
摘要由CSDN通过智能技术生成

c++小知识


一.const 与 mutable

const修饰的函数为常函数,常函数只能调用常函数,且函数内不能修改成员变量
如果想要在常函数中修改某个变量的话,就要在这个变量前面加mutable修饰符

这里可能会有疑问,如果想要在函数里修改变量,那把const修饰符去掉不就好了吗,我在知乎的一篇文章里看到有个评论,觉得很有道理
“c++的思想就是,你想要的都给你,至于你是否用,以及是否用的合理,那是你来评估的,作为语言不会限制,比如这个mutable 就是为了要在const函数里要改一部分需要改的变量,所以会加mutable,增加一个等级复杂度来让你确认,你真的要改这个变量吗?包括const cast 一样,就是传进来是const,但是因为你的业务发展,多个版本迭代,导致发现你需要对这个const 引用做修改,你就可以用const cast去把const 属性来取消。再说,话说只要是再数据段的变量,你只要想改,对于支持指针的语言俩说,谁都阻止不了你去改这段内存的内容的”
mutable修饰符就恰恰提现了c++语言的可操作性

在lambda中,如果捕获列表是[a]的形式,说明是以值的方式进行传递,默认是const的,不能对其进行修改,除非加mutable修饰符

auto err = [i](){ ++i; };   //Error: 试图修改按值捕获的变量i
auto err2 = [x{22}](){ ++x; };  //Error: 试图修改内部变量x
auto ok = [i, x{22}]() mutable { i++; x++; };

提示:未完待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值