博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中const使用注意要点(二)
阅读量:5074 次
发布时间:2019-06-12

本文共 967 字,大约阅读时间需要 3 分钟。

当const修饰类的成员变量

1、const修饰类的非静态成员时必须在构造函数初始化列表上初始化;

在构造函数内会提示表达式必须是可修改的左值,因为在构造函数内并不是初始化,仅仅是赋值,而const类型必须初始化。

2、const修饰类的静态成员必须在定义的地方对它初始化,因为静态成员是无法在构造函数初始化列表上初始化的;

当const修饰类的成员函数时

1、用const修饰类的对象,那么该对象不能调用任何修改类成员的方法;

2、把const放在成员函数后,比如void f() const {},那么该函数内不能修改类成员;

例外1:可以将this指针强制转换成非const指针来在2的情况下改变类成员

class Test{	int i;public:	Test(int ii = 0) : i(ii) {}	void f() const	{		((Test*)this)->i++;		(const_cast
(this))->i++; }};

例外2:使用mutable关键字,可以突破const的限制,被mutable修饰的变量将永远处于可变状态

 

实际往往会使用类的常引用来作为函数参数,这样就不会修改成员变量的值,但是要注意的是调用的方法后必须声明const

class MyClass{public:    MyClass(int _val = 0);    ~MyClass(void);    int Get() { return val; }private:    int val;};MyClass copy(const MyClass& bc){    int i = bc.Get();  // Error!    return MyClass(i);}

虽然我们知道Get函数不会改变成员变量,但是编译器不知道,这样它就会觉得你调用了可能改变成员变量的函数(Get)。

产生非常常见的编译错误:

error C2662: “MyClass::Get”: 不能将“this”指针从“const MyClass”转换为“MyClass &”

1> 转换丢失限定符

 

转载于:https://www.cnblogs.com/Harley-Quinn/p/5348424.html

你可能感兴趣的文章
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>