条款3 尽可能使用const
const 修饰指针时候的问题。
-
const char* str = “abc”; // str char* const str = "abc"; const char* const str = "abc"; char* str = "abc";
-
const 修饰迭代器的问题。
iterator 相当于 T* const => 就是指针不变,指针指向的值可以发生变化。 const_iterator 相当于 const T*
没有被const修饰的返回值被修改问题
-
自定义的对象返回值是可以被修改的
defineClass test(); test() = new defineClass ;
-
内置类型的返回值是不可以被修改的
int test(); test() = 1 ; // 错误的
const类型的成员函数被调用的问题
1、const成员调用
如果存在重载的同名成员函数test(),一个由const修饰一个没有,除此之外没有其他的区别。
class A{
void test();
void test() const;
}
那么const对象const A a;
在调用这个成员函数的时候会自动调用const类型的成员函数。
2、解决const 类型的函数重载代码重复问题
只可以定义了const 类型的函数,然后利用const类型的函数通过static-cast 和 const-cast转化成 non-const类型函数。
const -》 non-const
反过来不行,因为non-const具有不确定性。
const对象里面设置可以变成员问题
class A{
private:
string str;
mutable int a1;// 这两个不会受到const的影响
mutable int b1;
}
对于const A,如果想里面的变量a1和b1不受到const 的影响,也就是也会可以修改的话,需要添加mutable
变量。