为什么static 成员函数不能为const
2013-11-10 22:25
337 查看
以下是转载自CSDN某大牛博客(复制的时候手快了,忘了记名字)
最近在网上查资料的时候偶然看到有人说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成员函数不能用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中的普通事物。
相关文章推荐
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)
- C++的const类成员函数(解释为什么非const成员函数不能访问const对象的数据成员)
- 为什么静态成员函数不能是const
- c++ 类成员函数如果被static修饰,就不能为const修饰
- C++里的静态(static)成员函数(不能用const的原因+static在c++中的第五种含义)
- 为什么静态成员函数不能是const
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)(转)
- 有关static成员函数不能用const修饰的问题
- Static成员函数不能修饰const
- 为什么静态成员函数不能是const
- static成员函数不能调用non-static成员函数
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- C++点滴——const/volatile不能用来修饰没有this指针的成员函数
- 为何static成员函数不能为virtual
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- c++静态成员函数为什么不能为虚函数?
- C/C++——为什么类的静态成员函数在定义的时候不写static?
- 【c++笔记七】教你使用"const类型的对象、成员函数"和"static类型的成员函数、变量"
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?