簡體   English   中英

為什么靜態成員函數不能有cv-qualifier?

[英]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)。

靜態成員函數不應聲明為constvolatileconst volatile

static函數沒有this參數。 他們不需要cv-qualifiers。

這個答案由詹姆斯McNellis

const限定符應用於非靜態成員函數時,它會影響this指針。 對於類C的const限定成員函數, this指針的類型為C const* ,而對於非const限定的成員函數, this指針的類型為C*

static成員函數沒有綁定到它的類的實例,因此沒有意義它是const和/或volatile (即“cv-qualified”),因為沒有constvolatile可以是的實例適用於調用該函數。

在那里編寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM