c++ const修饰符用法

1.const修饰变量:说明该变量的值是不可更改的。并且const常量有数据类型检查,宏只进行简单的字符替换,没有类型安全检查。
2.const修饰类数据成员:const类型的数据成员只在该对象生存期内是不可变的,而对于整个类来说是可变的。所以不能在类声明中初始化const 数据成员,因为类的对象未被创建时,编译器不知道const数据成员的值是什么。const数据成员的初始化只能在构造函数的初始化列表中进行。
3.const修饰指针:const在*左边,表示指针指向为常量。const在*右边,表示指针本身为常量。
4.const在函数声明中的应用:const通常用于参数为指针或引用的情况,对所传入的参数起保护作用。若是值传递方式,则函数会产生临时变量用于复 制该参数,则不需要const修饰。对于非内部数据类型的参数,应该将值传递改为const 引用传递,这样可以提高效率。对于内部数据类型的参数,则不需要,否则既不能提高效率,又降低了可理解性。
5.类中的const成员函数:一般放在函数体后,形如:void fun() const ;如果一个成员函数的不会修改数据成员,那么最好将其声明为const,因为const成员函数中不允许对数据成员进行修改 ,如果修改,编译器将报错,这大大提高了程序的健壮性。
6.const修饰返回值:const如果修饰函数的返回值,多用于操作符重载。比如:
const Rational operator*(const Rational& lhs, const Rational& rhs) { return Rational(lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator()); } 返回值用const修饰可以防止允许这样的操作发生: Rational a,b; Radional c; (a*b) = c;
今天在书上看到的自定义vector类中对[ ]的重载就如同上面的例子。
除了这个,还有:
typedef Object * iterator; typedef const Object * const_iterator; iterator begin () { return &objects[0]; } const_iterator begin () const { return &objects[0]; }
上面是自定义了两个迭代器,一个是const一个是非const,如果返回值为const_iterator的话,也就意味着不能出现

vector<int> a; const_iterator it = a.begin(); *it = 0 ; //error

之所以把以前blog上的文章转过来,是因为今天看书的时候,碰到了const成员函数,一时不知道是什么意思了。所以把我目前所知的const的用法集中一下,也算是个巩固。

你可能感兴趣的:(c++ const修饰符用法)