const和构造函数
为什么c++不允许定义const构造函数呢?
- C/C++ code
#include <iostream>using namespace std;class Test_Const{public: Test_Const(int a):value(a){} Test_Const() const{value=12;} int getvalue() const{return value;} void setvalue(int a){value=a;}int value;};void main(){ Test_Const a; const Test_Const b(2); }编译:
error C2583: 'Test_Const::Test_Const' : 'const' 'this' pointer is illegal for constructors/destructors
难道就是因为有const对象不能调用非const成员函数这一规则?
[解决办法]
构造函数没有返回值,你定义const变成指向类本身,那么你对成员的赋值操作都是非法的,成员无法操作这个类有什么用?
[解决办法]
Const 函数 是 只读 函数 ,一般 在 只读 函数 内部 是不能 修改 变量的 值 ,只能 修改 mutable 变量的 值 ,试想 一下 ,构造 函数 是 就是 进行 一系列化的 初始化 ,或者 进行 变量 赋值 ,而 你把 构造 函数 搞成 只读 的 ,你认为 系统 会让你编译 通过 吗 ? 编译器 会 友好 的提示 说 你这行 可能有 问题 ,好了
、回答 完毕!!!
[解决办法]
const在函数的后面,表示不能修改成员变量
但构造函数一般或者总是要修改成员变量的
[解决办法]
尝试了一下。
从理论上理解,楼上各位说的都不错,不过我猜这就是一个规定吧。
constructors may not be cv-qualified
编译器说:构造函数不能用const或volatile修饰
- C/C++ code
#include <iostream>using namespace std;class A {public:// A() volatile {} //error// A() const {} //error};int main(void){ A a;}
[解决办法]
楼主已经理解的很好了,就是因为有const对象不能调用非const成员函数这一规则。
不过,还有一点,就是构造函数的功能,构造函数是用来初始化类的,初始化就是给对象维护的变量进行初始化,哪怕对象或类里面没有变量,构造函数的功能依然是初始化,既然是初始化,编译器就会认为你“可能”会初始化变量,所以编译器不让你的代码通过。这也是编译器的一个规定。
[解决办法]
[解决办法]