为什么静态成员函数不能用'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