Static成员函数不能修饰const
2009-06-03 14:04
465 查看
最近在网上查资料的时候偶然看到有人说static成员函数不能用const修饰的问题,感觉有点奇怪,以前都没有这么用过,也没有想过他们两个到底能不能搭配起来使用,后来仔细一想发现确实是这么回事,因为我们在定义一个类对象的时候,实际上只给该对象的非静态的数据成员分配内存空间(假设没有虚函数),而该类的静态成员数据以及该类的函数都在编译的时候分配到一个公共的空间里,所有,在定义一个对象并调用类对象的函数的时候,函数根本不知道到底是哪个对象调用了他,怎么解决这个问题呢,C++利用传递this指针的方式来实现,调用一个类对象里的函数的时候,将把这个对象的指针传递给他,以便函数对该对象的数据进行操作,对于一个定义为const的函数,传递的是const的this指针,说明不能更改对象的属性,而对static成员的函数不需传递this指针,所有就不需要用const来修饰static的成员函数了!就说const属性的作用就是对被传递的this指针加以限定,而对static成员函数的调用根本不传递this指针,所有不需const来修饰static的成员函数~~~~
从对象模型上来说,类的非static成员函数在编译的时候都会扩展加上一个this参数,const的成员函数被要求不能修改this所指向的这个对象;而static函数编译的时候并不扩充加上this参数,自然无所谓const。
因为const成员函数的const是修饰this所指指物的也就是this将会被声明为const CLASSNAME*。
而static不存在this指针,所以const对static member function的修饰是无效的。
static member怎么看都是活在CLASSNAME NAMESPACE中的普通事物。
从对象模型上来说,类的非static成员函数在编译的时候都会扩展加上一个this参数,const的成员函数被要求不能修改this所指向的这个对象;而static函数编译的时候并不扩充加上this参数,自然无所谓const。
因为const成员函数的const是修饰this所指指物的也就是this将会被声明为const CLASSNAME*。
而static不存在this指针,所以const对static member function的修饰是无效的。
static member怎么看都是活在CLASSNAME NAMESPACE中的普通事物。
相关文章推荐
- c++ 类成员函数如果被static修饰,就不能为const修饰
- 有关static成员函数不能用const修饰的问题
- 静态成员函数不能用const修饰 ,也不能存取nonstatic数据
- 【C++】const、volatile不能修饰没有this指针的成员函数
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)(转)
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)
- 能不能同时用static和const修饰类的成员函数?
- 静态成员函数不能采用const修饰的原因
- C++里的静态(static)成员函数(不能用const的原因+static在c++中的第五种含义)
- 为什么static 成员函数不能为const
- C++点滴——const/volatile不能用来修饰没有this指针的成员函数
- const成员函数与static成员函数
- C++ const 修饰成员函数
- 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static
- [C#]为什么Interface里的成员不能使用static修饰?
- C++ static const 修饰成员
- 类的成员变量修饰 const 和static
- 为什么静态成员函数不能是const
- 成员函数在类外定义的时候,函数名为啥不能加static