很想知道静态成员函数不能声明为const或volatile或const volatile的原因吗?
#include<iostream>
class Test
{
static void fun() const
{ // compiler error
return;
}
};
Run Code Online (Sandbox Code Playgroud)
jpa*_*cek 14
成员函数的cv修饰符对应于隐藏this参数的限定.
static函数没有this参数.因此,他们不需要cv限定符.所以决定(恕我直言,否则,没有意义)在static功能上禁止它们.
BTW static成员函数也不能virtual,纯(=0),删除,默认&&等.
Luc*_*ore 11
因为这就是标准所说的:
2)[注意:静态成员函数没有this指针(9.3.2).- 尾注]
static成员函数不得virtual.不应存在具有相同名称和相同参数类型static的非static成员函数(13.1).静态成员函数不得申报const,volatile或const volatile.(强调我的)
这样做的原因是,一个const(或volatile或virtual)static方法就没有意义(在传统意义上,见下文).例如,const暗示你无法修改对象的成员,但在静态的情况下,没有可以讨论的对象.
你可以说a const static可以适用于其他static成员,但这个选项被认为是没有意义的.