一段关于构造函数的代码,不解
- C/C++ code
EMapEditSchedule(const EMapEditSchedule &); //(1)const EMapEditSchedule & operator = (const EMapEditSchedule &); //(2)explicit EMapEditSchedule(size_t max_step = 20) //(3) : m_cnt(0), m_maxCMD(max_step) { m_cmd = m_cmdList.begin(); }
既然已经定义了显示构造函数(3),为什么还要声明(1)?还有(2)的重载并没有定义,是有什么原因吗?
[解决办法]
1. 1和3是重载关系,它们的参数类型是不同的
2. 2是操作符=的重载声明
3. 所有声明的函数1和3,应该会在别的地方(比如某个cpp文件中)有实现
[解决办法]
explicit EMapEditSchedule(size_t max_step = 20) 加explicit是为了防止size_t隐式地向EMapEditSchedule转换
[解决办法]
看样子,1和2没有定义,是作者不想,或者不认为这类型的对象可以复制,即复制构造和赋值操作,这样写可以防止出现错误代码,因为链接就会报错,而不用等到运行时莫名其妙。
也可以将1和2做私有权限,编译时就可以检测到。