今天我遇到了一个问题。我需要一个static成员函数,const不是必须的而是更好的。但是,我的努力没有成功。有谁能说出原因和方式吗?
发布于 2011-08-12 11:46:17
将const限定符应用于非静态成员函数时,会影响this指针。对于类C的常量限定的成员函数,this指针的类型为C const*,而对于非常量限定的成员函数,this指针的类型为C*。
静态成员函数没有this指针(这样的函数不会在类的特定实例上调用),因此静态成员函数的常量限定没有任何意义。
发布于 2011-08-12 13:08:26
我同意你的问题,但不幸的是C++就是这样设计的。例如:
class A {
int i; //<--- accessed with 'this'
static int s; //<---- accessed without 'this'
public:
static void foo () const // <-- imaginary const
{}
};到今天为止,const是在this的上下文中考虑的。在某种程度上,它是狭窄的。通过在this指针之外应用此const,可以使其范围更广。
也就是说,也可以应用于static函数的“提议的”const将限制static成员进行任何修改。
在示例代码中,如果可以将foo()设置为const,那么在该函数中,不能修改A::s。如果将此规则添加到标准中,我看不到任何语言副作用。相反,有趣的是为什么这样的规则不存在!
发布于 2016-06-12 02:32:49
不幸的是,C++没有按照设计接受它,但从逻辑上讲,很少有用例能很好地验证它。
一个类级有效(静态)的函数可能不会改变任何静态数据,可能只是查询数据应该是常量的。也许它应该是这样的
if(Object)
MakeThisConstant()
else
MakeStaticDataConstant() // Only in the scope but static data cannot be constant so may be it should in some scenarioshttps://stackoverflow.com/questions/7035356
复制相似问题