const深度用法
在cpp中const是声明一个常量,与其说是一个声明,不如说是一个承诺,在承诺你不回去改变他,在cpp中如同c语言一样,想要修改const声明的值是可以通过指针手段实现的。
例子如下:
1 2 3 4 5 6 7 8 9 10 11 #include <iostream> int main () { const int a=10 ; int * p=new int ; p=(int *)&a; p*=20 ; }
在平常中const的值不如我们所想的安全,在cpp的类中const也有它独有的使用的地方。包括于引用得一些配合
例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <iostream> class A { private : int a=10 ; public : int B () const { a=2 return a; } const int * const C () const {} }; void change (const A& e) { cout << e.B ()<,std::endl; } int main () { const A a; a.B (); }
在以上例子中在外部函数的调用中我们可以发现,const在数据的保护和程序的规范具有很强大的作用,那么当我们在众多数据中都被规定了无法修改,也是对数据的保护。
multable
在multable中可以修饰数据使其能在类中的被const修饰的方法中支持修改数据。
multable有两种用法:
与const联合使用
用在lambda表达式里
或者两者混合使用
首先与const混合使用,在class构建过程中我们入股一直使用const修饰的函数但是其中的某些变量却是我们必修得改变的,或者为了代码的整体维护更加方便,所以我们不得不将一些变量变得可以修改,那么我们就需要multable关键字。使得数据可以在const方法中被修改。
例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream> class A { private : const char * name="abc" ; multable int a=10 ; public : cosnt std::string& B () const { a++; return name; } }; int main () { cont A a; a.B (); }
以上是最常见的在类中的使用。
其次是与lambda内的使用。
例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 int main () { int x=0 ; auto f=[=]()mutable { x++; std::cout << x << std::endl; }; auto f=[=]() { int y=x; y++; std::cout << y << std::endl; } f (); }
资料参考
youtube上的thecharno的cpp系列