为什么静态成员函数不能用'const'限定符创build

今天我遇到了一个问题。 我需要一个static成员函数, const不是必须的,而是更好的。 但是,我的努力没有成功。 有人可以说为什么或如何?

const限定符应用于非静态成员函数时,会影响this指针。 对于类C的const限定成员函数, this指针的types是C const* ,而对于不是const限定的成员函数, this指针的types是C*

一个静态成员函数没有this指针(这个函数不是在某个类的特定实例上调用的),所以const成员函数的const限定没有任何意义。

我同意你的问题,但不幸的是C ++是这样devise的。 例如:

 class A { int i; //<--- accessed with 'this' static int s; //<---- accessed without 'this' public: static void foo () const // <-- imaginary const {} }; 

从今天起, const就是在this背景下考虑的。 在某种程度上,它是狭窄的。 通过在this指针之外应用这个const ,可以扩大它的范围。
即“提议” const ,也可能适用于static函数,将限制static成员进行任何修改。

在示例代码中,如果可以将foo()设置为const ,那么在该函数中, A::s不能被修改。 如果将此规则添加到标准,我看不到任何语言的副作用。 相反,为什么这样的规则不存在呢!

没有深入细节,这是因为可能有也可能不是由函数修改的对象,所以const对于编译器是不明确的。

回想一下, const保持对象不变,但是在这里可能有或没有对象保持不变。

不幸的是,C ++并不接受它按照devise,但逻辑上很less有用例validation。

类级别有效(静态)的函数可能不会更改任何静态数据,可能只是查询数据应该是const。 可能应该是这样的

 if(Object) MakeThisConstant() else MakeStaticDataConstant() // Only in the scope but static data cannot be constant so may be it should in some scenarios