[英]Why can't a static member function have a cv-qualifier?
這是錯誤:
error: static member function ‘static void myClass::myfunct()’ cannot have cv-qualifier
有人可以解釋這個錯誤以及為什么const不能使用。
#include<iostream>
class myClass{
static void myfunct() const
{
//do something
}
};
int main()
{
//some code
return 0;
}
值得在這里引用標准
9.4.1靜態成員函數
2)[注意:靜態成員函數沒有this指針(9.3.2)。 -end note]
static
成員函數不應是virtual
。 不應存在具有相同名稱和相同參數類型的static
和非static
成員函數(13.1)。靜態成員函數不應聲明為
const
,volatile
或const volatile
。
static
函數沒有this
參數。 他們不需要cv-qualifiers。
見這個答案由詹姆斯McNellis
將
const
限定符應用於非靜態成員函數時,它會影響this
指針。 對於類C
的const限定成員函數,this
指針的類型為C const*
,而對於非const限定的成員函數,this
指針的類型為C*
。
static
成員函數沒有綁定到它的類的實例,因此沒有意義它是const
和/或volatile
(即“cv-qualified”),因為沒有const
或volatile
可以是的實例適用於調用該函數。
在那里編寫const
是沒有意義的,因為函數是static
,因此沒有類實例可以在其中填充const
上下文。 因此它被視為錯誤。
成員函數聲明中的限定符const應用於指向類this對象的指針。 由於靜態函數沒有綁定到類的對象,因此它們沒有隱式參數。 所以限定符const對這些函數沒有任何意義。
成員函數的const限定符意味着該函數不會更改對象實例,並且可以在const對象上調用。 靜態成員函數沒有綁定到任何對象實例,因此它們沒有意義為const,因為您不在任何對象上調用靜態成員函數。 這就是為什么標准禁止它。
class Foo
{
public:
void memberFunc();
static void staticMemberFunc();
}
Foo f;
f.memberFunc(); // called on an object instance
Foo::staticMemberFunc(); // not called on an object instance
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.