#include<iostream>
using namespace std;
class T{
public:
int get()
{
return a;
}
void add_n()
{
a++;
}
T():a(0){}
T(int i):a(i){}
private:
int a;
};
void do_somefuc(T &t,const T &const_t)
{
int a=t.get();
//int b=const_t.get(); /*cannot convert 'this' pointer from 'const class T' to 'class T &'*/
/*编译器不知道get()是否修改了对象a,const_t.get()是错误的,我们没有给出任何这方面的信息*/
/*因此编译器假定get()有更改对象a,报告一个错误*/
t.add_n();
// const_t.add_n(); 容易理解常量不能改变
}
int main()
{
T t1;
T t2(8);
do_somefuc(t1,t2);
return 0;
}
另一个版本 使用常量函数告诉编译器 没有改变对象。
#include<iostream> using namespace std; class T{ public: int get() const /*使用const告诉编译器 get不改变对象a*/ { return a; } void add_n() { a++; } T():a(0){} T(int i):a(i){} private: int a; }; void do_somefuc(T &t,const T &const_t) { int a=t.get(); int b=const_t.get(); t.add_n(); //const_t.add_n(); } int main() { T t1; T t2(8); do_somefuc(t1,t2); return 0; }