const修饰指针总结

char str[] = "test";

char *p = str; //非常量指针,指向非常量

const char * p = str; //非常量指针,指向常量

char * const p = str; //常量指针,指向非常量

const char * const p = str; //常量指针,指向常量

const出现在星号左边,表示被指物为常量,const出现在星号右边,表示指针本身为常量指针,总结成一句话:

左定值,右定位

迭代器的底层实现是指针,当const用于修饰迭代器的时候和修饰指针类似:

std::vector::iterator it = vec.begin(); //非常量指针,指向非常量

std::vector::const_iterator it = vec.begin(); //非常量指针,指向常量

const std::vector::iterator it = vec.begin(); //常量指针,指向非常量

const std::vector::const_iterator it = vec.begin(); //常量指针,指向常量

const类成员函数重载:

class A {
public:
    ...
    const char& operator[](std::size_t pos) const; //const型类成员函数
    char& operator[](std::size_t pos); //非const型成员函数
}

以下是两种调用场景:

A obj;

obj[10] = 10; //正确,调用非const型成员函数,可以被改动

const A obj;

obj[10] = 20; //错误,调用const型成员函数,不可以被改动

 还有一点要特别注意:返回类型必须是引用,如果直接返回内置类型,那么企图更改成员函数的返回值本身就是错误的做法,因为返回值是临时变量,返回后就会被释放!

 

你可能感兴趣的:(C/C++)