const用法分类
1.1常变量: const 类型说明符 变量名 1.2 常引用: const 类型说明符 &引用名 1.3 常对象: 类名 const 对象名(实参) / const 类名 对象名(实参) 1.4 常成员函数: 类名::fun(形参) const 1.5 常数组: 类型说明符 const 数组名[大小] 1.6 常指针: const 类型说明符* 指针名 ,类型说明符* const 指针名 1.7 常函数参数: void Fun( const A *in); //修饰指针型传入参数 void Fun(const A &in); //修饰引用型传入参数 1.8 常函数返回值 const 类名:fun(形参)
常成员变量
常成员变量与普通常变量申明类似,区别是常成员变量只能在构造方法参数初始化列表初始化。
const int a =10 等价于 int const a = 10: 指定a是一个常变量 const int *a=&b const修饰的是 *a,故这里表示指针指向的内容*a不能变(不能给*a赋值),但是指针a是可以变的(可以给a赋值为别的地址)。 int const *a=&b 与上面的功能相同 int * const a = &b: const修饰的是指针a,也就是这里定义了一个常指针,指针本身的值不可以 改变(不可以给指针赋值为别的地址),但是指向的内容*a可以改变(可以给*a赋值别的数据)。 const int * const a = &b 指向常数据的常指针,既不可以给*a赋值,也不可以给a赋值。 const int &a=100 常数引用,即不能改变引用的值。
const成员函数:用于类数据保护
const成员函数主要用于数据保护,保护类中对象不被修改,可以使用类中所有成员变量,但是不可以修改成员变量的值。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
class Test { public: char *name; char *getName() const; } //防止外部修改name的值,故定义为const,只为获取值。 char* Test::getName() const { return name; }
const对象
const对象必须被初始化。
若是new初始化,new返回的指针必须是const类型的
const对象只能访问const成员函数,而非const对象可以访问任意的成员函数;
const对象的成员是不能修改的,而通过指针维护的对象却可以修改的;class Test { public: string name; Test(string name); string getName() const; void setName(string name); void setName(string name) const; //此方法为上一方法的重载 }; string Test::getName() const { return name; } Test::Test(string name){ this->name = name; } void Test::setName(string name){ this->name = name; } void setName(string name) const { this->name = name;//报错,未定义的=:常成员函数不能修改成员变量。 } int main() { using namespace std; const Test test("xiaoM"); cout<<test.getName()<<endl; //test.setName("aaa"); //编译错误:常成员对象无法调用非常成员函数 }
常函数参数:避免函数修改传递过来的对象。
void func(const int a); 做为参数使用,说明函数体内是不能修改该参数的;
对不同参数定义时不同的形式,可参见定义变量时使用方式同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
函数参数中const 指针,表示不允许将该指针指向其他内容。常函数返回值
可以阻止用户修改返回值。返回值也要相应的赋值给一个常量或常指针。
常指针有两种类型:
const 类型说明符* 指针名
等同于类型说明符 const* 指针名
:指针名
不能指向别的内存地址,但可以修改其指向的内存地址的内容。类型说明符* const 指针名
:*指针名
的内容不可以改变,但指针名
可以指向别的字符串使用
定义const常量 方便编译器进行类型检查 保护被修饰的内容,避免意外修改 节省空间 提高效率
mutable
mutable也是为了突破const的限制而设置的,只能修饰类的非静态数据成员.
使用场景:
需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
C++ const
最新推荐文章于 2024-01-04 22:40:55 发布