代码疑云(5)-类成员函数的thiscall约定

代码:

#include<iostream>
using namespace std;

class A
{
private:
  int value;
public:
  A()
  {
    value=0;
  }
  void coutHello()
  {
    cout<<"hello"<<endl;
  }
  void coutValue()
  {
    cout<<value<<endl;
  }
};
int main()
{
  A *pA=NULL; //空指针,所指向的内容不可访问存取

  pA->coutHello();
  pA->coutValue();

  return 0;
}

(感谢网友提供的题目)

疑:调用coutHello和coutValue方法有什么问题?

解答:成员函数的地址在编译器编译时给出的,所以是已知的,根据thiscall约定,类的成员函数在编译时编译器会传入一个this指针,通过this指针指向成员变量,在调用couthello时并未用到this指针所以调用正常,而调用coutvalue时,value需要用到this指针,因为此时this是NULL指针,所以会发生内存报错。

======= welcome to my HomePage(http://blog.csdn.net/zhanxinhang) to have a communication =======

你可能感兴趣的:(null,编译器)