C++:为什么不能将静态函数声明为const或volatile或const volatile

Laa*_*vaa 8 c++

可能重复:
C++ - 为什么不能使用'const'限定符创建静态成员函数

很想知道静态成员函数不能声明为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

因为这就是标准所说的:

9.4.1静态成员函数[class.static.mfct]

2)[注意:静态成员函数没有this指针(9.3.2).- 尾注] static成员函数不得virtual.不应存在具有相同名称和相同参数类型static的非static成员函数(13.1).静态成员函数不得申报const, volatileconst volatile.(强调我的)

这样做的原因是,一个const(或volatilevirtual)static方法就没有意义(在传统意义上,见下文).例如,const暗示你无法修改对象的成员,但在静态的情况下,没有可以讨论的对象.

你可以说a const static可以适用于其他static成员,但这个选项被认为是没有意义的.