首页 > 试题广场 >

C++中成员函数能够同时用static和const进行修饰?

[问答题]
C++中成员函数能够同时用static和const进行修饰?
NO
C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的中参数的值,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。
编辑于 2015-07-09 11:02:26 回复(1)
No
static修饰的函数表示该函数是属于类的,而不是属于某一个对象的,没有this指针。
const修饰的函数表示该函数不能改变this中的内容,会有一个隐含的const this指针。
两者是冲突矛盾的。
发表于 2015-08-21 09:39:18 回复(0)
因为我们在定义一个类对象的时候,实际上只给该对象的非静态的数据成员分配内存空间(假设没有虚函数),而该类的静态成员数据以及该类的函数都在编译的时候分配到一个公共的空间里,所有,在定义一个对象并调用类对象的函数的时候,函数根本不知道到底是哪个对象调用了他,怎么解决这个问题呢?
C++利用传递this指针的方式来实现,调用一个类对象里的函数的时候,将把这个对象的指针传递给他,以便函数对该对象的数据进行操作,对于一个定义为const的函数,传递的是const的this指针,说明不能更改对象的属性,而对 static成员的函数不需传递this指针,所有就不需要用const来修饰static的成员函数了! 就说const属性的作用就是对被传递的this指针加以限定,而对static成员函数的调用根本不传递this指针,所有不需const来修饰static的成员函数。
从对象模型上来说,类的非static成员函数在编译的时候都会扩展加上一个this参数,const的成员函数被要求不能修改this所指向的这个对象;而static函数编译的时候并不扩充加上this参数,自然无所谓const。 
发表于 2016-03-20 11:08:43 回复(1)
const成员函数:例如 void Stock::Show()const;
    表示类的方法不能修改调用对象,也就是this.Show()不能改变this的值;
    但是被static修饰的函数不属于具体的对象而属于整个类,和this无关,因此不能同时用static和const来修饰一个成员函数。
发表于 2015-06-18 14:00:04 回复(0)
const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall
而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它
发表于 2015-05-07 02:18:04 回复(1)
如果说该成员函数没有涉及到this指针,static基础上加个const还是可以的,只是const基本上没用而已。这题出的不严谨
发表于 2016-09-09 10:21:47 回复(0)
不能。
若被static修饰,则成员函数为this指针。
若被const修饰,则必有this指针。
发表于 2015-07-26 10:54:28 回复(0)
显然是不能的,const函数不能改变对象内的变量,也就是不能通过this指针改变变量,然而static函数是属于整个类的而不是属于某个对象的,这样就互相矛盾。
发表于 2015-06-02 13:09:56 回复(0)
不能
const修饰成员函数表示该函数不能改变this中的内容
而静态成员函数中没有接受this指针,只能访问静态成员变量
发表于 2015-06-01 07:39:41 回复(0)
否,因为static表示该函数为静态成员函数,为类所有;而const是用于修饰成员函数的,两者相矛盾
编辑于 2015-05-18 13:11:41 回复(0)