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]静态成员函数。
从那以后(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)
它仍然需要纪律,但至少这样编译器可以捕获意外的修改尝试。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |