这是错误:
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;
}
答案 0 :(得分:35)
值得引用这里的标准
9.4.1静态成员函数
2)[注意:静态成员函数没有this指针(9.3.2)。 -end note]
static
成员 功能不应是virtual
。不应该有static
和非static
成员函数 相同的名称和相同的参数类型(13.1)。不应声明静态成员函数
const
,volatile
或const volatile
。
static
个函数没有this
个参数。他们不需要cv资格赛。
请参阅James McNellis的this回答
将
const
限定符应用于非静态成员函数时, 它会影响this
指针。对于const限定的成员函数 在类C
中,this
指针的类型为C const*
,而对于a 成员函数不是const限定的,this
指针是 输入C*
。
答案 1 :(得分:12)
static
成员函数未绑定到其类的实例,因此它const
和/或volatile
没有意义(即“cv-qualified” “),因为在调用该函数时没有const
或volatile
可以应用的实例。
答案 2 :(得分:4)
在那里编写const
是没有意义的,因为函数是static
,因此没有类实例可以填充const
上下文。因此,它被视为错误。
答案 3 :(得分:1)
成员函数声明中的限定符const应用于指向此类对象的指针。由于静态函数没有绑定到类的对象,因此它们没有隐式参数。所以限定符const对这些函数没有任何意义。
答案 4 :(得分:1)
成员函数的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