[C++] const对象只能调用const方法的原因
2014-12-19 16:01
483 查看
首先,对象的方法内修改成员内容是通过this指针实现的。比如A->fun(); 实际上会在fun中传入对象A的this指针。
其次,const对象在调用方法的时候,只能提供const类型的this指针,准确的说是后const指针,不能修改指向内容的。因此const对象只能调用const方法。
实际上呢,会产生一个类型转换错误,具体如下:
编译器给出的提示说的已经很清楚了'fun' : cannot convert 'this' pointer from 'const class A' to 'class A &'。
con_a.fun()这句代码,需要使用con_a作为this指针,并且需要的是一个class A &类型的this指针,但是con_a只能提供const class A&类型的this指针,所以这里会产生类型转换失败的提示。
其次,const对象在调用方法的时候,只能提供const类型的this指针,准确的说是后const指针,不能修改指向内容的。因此const对象只能调用const方法。
实际上呢,会产生一个类型转换错误,具体如下:
#include <iostream> using namespace std; class A { public: void fun(); void const_fun() const; }; void A::fun() { cout << "fun" << endl; } void A::const_fun() const { cout << "const fun" << endl; } int main() { A a; a.fun(); a.const_fun(); cout << "-----------------------------" << endl; const A con_a; // con_a.fun(); // 'fun' : cannot convert 'this' pointer from 'const class A' to 'class A &' con_a.const_fun(); return 0; }
编译器给出的提示说的已经很清楚了'fun' : cannot convert 'this' pointer from 'const class A' to 'class A &'。
con_a.fun()这句代码,需要使用con_a作为this指针,并且需要的是一个class A &类型的this指针,但是con_a只能提供const class A&类型的this指针,所以这里会产生类型转换失败的提示。
相关文章推荐
- C++中const引用的是对象的时候只能调用该对象的f()const方法
- C++中const引用的是对象的时候只能调用该对象的f()const方法
- C++之const对象只能调用const成员函数---补充(18)《More Effective C++》
- C++细节学习之const对象只能调用const函数
- Spring AOP不拦截从对象内部调用的方法原因
- C++静态成员函数不能声明为const、volatile、virtual的原因 与 C++的对象模型
- 只声明对象也能调用方法但不起作用的原因分析
- 常对象只能调用常函数成员 c++
- C++ const方法及对象
- Spring AOP不拦截从对象内部调用的方法原因
- C++中private的作用域,const对象调用非const函数的问题
- c++ std::sort函数调用经常出现的invalidate operator<错误原因以及解决方法
- 1. const 之 const 型对象只能调用const型成员
- Spring AOP不拦截从对象内部调用的方法原因
- Spring AOP不拦截从对象内部调用的方法原因
- Spring AOP不拦截从对象内部调用的方法原因
- EasyUI 调用getSelections方法只能获取到一行的原因
- C++对象数组调用构造/析构函数的方法
- 项目中的错误:const对象只能调用const函数
- const 对象只能调用 const 函数