C++ - 为什么不能使用'const'限定符创建静态成员函数

pra*_*ran 78 c++ static language-lawyer const-method

今天我遇到了问题.我需要一个static会员功能,const不是必须而是更好.但是,我没有成功.任何人都可以说为什么或如何?

Jam*_*lis 123

const限定符应用于非静态成员函数时,它会影响this指针.对于类的const限定成员函数C,this指针是类型C const*,而对于非const限定的成员函数,this指针是类型C*.

静态成员函数没有this指针(这样的函数不会在类的特定实例上调用),因此静态成员函数的const限定没有任何意义.

  • ** - 1**"一个静态成员函数没有这个指针......所以静态成员函数的const限定没有任何意义[那种方式]"本身就是真的,但作为一个anwer是错误的问题是"为什么".作为答案,它假设"const"的含义对于静态成员和非静态成员必须相同.作为一个思想不成立的例子,考虑"静态"的含义,这取决于上下文. (5认同)
  • 是 `C const*` 还是 `const C*` ? (2认同)

iam*_*ind 21

我同意你的问题,但遗憾的是C++就是这样设计的.例如:

class A {
  int i;         //<--- accessed with 'this'
  static int s;  //<---- accessed without 'this'
public:
  static void foo ()  const // <-- imaginary const
  {}
};
Run Code Online (Sandbox Code Playgroud)

截至今天,const在上下文中考虑this.在某种程度上,它是狭窄的.通过constthis指针之外应用它可以使它更广泛.
即,"建议" const,也可能适用于static功能,将限制static成员的任何修改.

在示例代码中,如果foo()可以const,那么在该函数中,A::s不能修改.如果将此规则添加到标准中,我看不到任何语言副作用.相反,为什么不存在这样的规则是有趣的!

  • 可能与你不能修改自由函数意味着"此函数不修改任何全局变量"的原因相同.`const`适用于一个对象(在const成员函数的情况下,它被调用的实例).你想让它适用于班级的所有静态成员,我猜想如果委员会完全考虑它,那么它就不被认为是支持的常见要求. (8认同)