#include<iostream>usingnamespace std;classA{public:A(int data =0):m_data(data){}// 编译后: void print(const A *this)voidprint(void)const{// 这里对成员变量进行了修改,编译会报错// 除非给 int m_data 前加 mutable
cout << m_data++<< endl;}private:int m_data;};intmain(void){
A a;// 通过之前学的this指针,当通过一个对象调用一个成员函数时,会把这个对象的地址当做实参传给成员函数// 本例子是非常对象使用常函数。// 当中中会有类型转换,即,&a -> this, A* -> const A*这是合法的,相当于缩小了对内存的访问权限.但扩大权限就不合法了
a.print();// A::print(&a)}
$ g++ a.cpp
a.cpp: In member function ‘void A::print() const’:
a.cpp:10:23: error: increment of member ‘A::m_data’ in read-only object
cout << m_data++ << endl;