const静态成员函数:是否可以使用另一种方法?

Pie*_*tro 2 c++ static-methods const

本问答中所述,const静态成员函数在C ++中不可用。此后(2011年)有什么变化吗?

有没有其他方法可以使静态成员函数不修改其类的静态成员?

类似于(伪代码)的东西:

class C
{
   static int a;
public:
   static void Incr() { ++a; }
   static int  Ret() const { return a; }
};

int C::a = 0;
Run Code Online (Sandbox Code Playgroud)

我需要从另一个类的const成员函数中调用[const]静态成员函数。

eik*_*ike 7

根据当前的cppreference.com(有关静态成员的页面),静态成员函数仍然不能为const,因为const关键字仅修改this指针,而静态函数显然没有。

因此,自编写您所指的答案以来,似乎一切都没有改变。


Sto*_*ica 5

从那以后(2011 年)有什么变化吗?

没有任何改变,您仍然无法对静态成员函数进行 cv 限定。

是否有另一种方法可以让静态成员函数不修改其类的静态成员?

这不是一个完美的解决方案,但您可以为静态数据成员声明 const“别名”:

static int  Ret() { 
    static constexpr const auto& a = C::a;
    // Now C::a is shadowed by the local a
    // and the function can't modify it.
    // a = 2; // ill-formed
    return a * 2; // OK
}
Run Code Online (Sandbox Code Playgroud)

它仍然需要纪律,但至少这样编译器可以捕获意外的修改尝试。

  • @eike - 我听到了。我也明白OP的来源。但这是我能想到的最接近的近似值。 (2认同)