今天我遇到了一个问题。我需要一个静态成员函数,最好是带有const修饰符的。但是,我尝试了很多次都没有成功。有人能告诉我为什么或者怎么做吗?
当你将const
限定符应用于非静态成员函数时,它会影响this
指针。对于一个类C
的const限定成员函数,this
指针的类型是C const*
,而对于一个没有const限定的成员函数,this
指针的类型是C*
。
静态成员函数没有this
指针(这样的函数不是在类的特定实例上调用的),因此对静态成员函数进行const限定没有任何意义。
const
关键字对于静态成员和非静态成员是相同的含义。举个例子来说明这种思维方式是不正确的,那就是考虑static
关键字的含义,它取决于上下文。 - Cheers and hth. - AlfC const*
还是 const C*
? - crisronconst
限定符放在最内层类型的左侧还是右侧都没有影响。 - Tyg13我同意你的问题,但不幸的是C++就是被设计成那样的。例如:
class A {
int i; //<--- accessed with 'this'
static int s; //<---- accessed without 'this'
public:
static void foo () const // <-- imaginary const
{}
};
截至今日,const
在 this
上下文中被视为是狭义的。可以通过将此 const
应用于this
指针以外的地方来使其更加广泛。const
,也可能适用于static
函数,将会限制static
成员的任何修改。
在示例代码中,如果可以使foo()
成为const
,那么在该函数中,A::s
将无法被修改。如果这个规则被添加到标准中,我没有看到任何语言副作用。相反,有趣的是,为什么不存在这样的规则!
const
修饰符不适用于成员方法或成员变量,而是用于隐式的this
指针。由于静态成员方法不绑定到对象,因此没有this
指针可以使用const
。 - Ruud Althuizenif(Object)
MakeThisConstant()
else
MakeStaticDataConstant() // Only in the scope but static data cannot be constant so may be it should in some scenarios
不细讲,这是因为函数可能会或者可能不会修改对象,因此 const 对编译器来说是有歧义的。
回想一下,const
用于保持对象常量,但在这里可能会或者可能不会有对象需要被保持常量。
this
指针。(此外,“const”并不能使对象保持不变。它防止使用特定的指针或引用来修改对象,但仍可能通过另一条路径进行修改) - Ben Voigt
const
静态成员函数意味着什么? - GManNickG