首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -为什么不能使用'const‘限定符创建静态成员函数

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

Stack Overflow用户
提问于 2011-08-12 11:41:32
回答 5查看 57.1K关注 0票数 98

今天我遇到了一个问题。我需要一个static成员函数,const不是必须的而是更好的。但是,我的努力没有成功。有谁能说出原因和方式吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-12 11:46:17

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

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

票数 156
EN

Stack Overflow用户

发布于 2011-08-12 13:08:26

我同意你的问题,但不幸的是C++就是这样设计的。例如:

代码语言:javascript
复制
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。如果将此规则添加到标准中,我看不到任何语言副作用。相反,有趣的是为什么这样的规则不存在!

票数 26
EN

Stack Overflow用户

发布于 2016-06-12 02:32:49

不幸的是,C++没有按照设计接受它,但从逻辑上讲,很少有用例能很好地验证它。

一个类级有效(静态)的函数可能不会改变任何静态数据,可能只是查询数据应该是常量的。也许它应该是这样的

代码语言:javascript
复制
if(Object)
    MakeThisConstant()
else
    MakeStaticDataConstant() // Only in the scope but static data cannot be constant so may be it should in some scenarios
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7035356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档