【问题标题】:Explicitly access static member variable in static member method - in C++在静态成员方法中显式访问静态成员变量 - 在 C++ 中
【发布时间】:2023-03-06 09:36:01
【问题描述】:

我知道如何在静态成员方法中访问静态成员变量——这是我通常使用的两种方式(非常简单):

class S{
    private:
        static const int testValue = 5;
    public:
        static int getTestValue0(){
            return testValue;
        }
        static int getTestValue1(){
            return S::testValue;
        }
};

(工作示例:http://ideone.com/VHCSbh

我的问题是:有没有比ClassName::staticMemberVar更明确的方式访问静态成员变量?

在 C++ 中有类似 self:: 的东西吗?

...只是我正在寻找类似 @​​987654326@ 的东西来引用静态成员。

【问题讨论】:

  • “C++ 中是否有类似self:: 的东西?” 没有。不过,您可以为 self 提供一个类本地 typedef。
  • @πάνταῥεῖ 好吧,我想我被类名困住了......谢谢:)
  • @jave.web 如前所述,您可以提供本地typedef MyClass self;。我正在为带有大模板参数列表的冗长类名这样做。

标签: c++ class static this static-members


【解决方案1】:

C++ 中有类似self:: 的东西吗?

不,没有这样的功能,但你可以使用本地类typedef

class MyClass {
    typedef MyClass self;
    static int testValue;
    static int getTestValue1(){
        return self::testValue;
    }
};

查看有效的demo

【讨论】:

  • 那么这真的只是 LOCAL typedef 吗? (我可以在一个应用程序的更多静态类中使用它吗?)
  • @jave.web 是的,甚至是private
  • 是的,我知道它是私有的,因为没有“秘密级别”的定义 :) 我只是想确保一个班级的 self:: 甚至不会尝试访问另一个班级。 :)
  • 从C++11开始,也可以使用using self = MyClass;
【解决方案2】:

不支持使用类名以外的名称。你需要实现它。

静态函数成员:通过将函数成员声明为静态,您 使其独立于类的任何特定对象。一个静态的 即使类的对象不存在也可以调用成员函数 静态函数只能使用类名和 范围解析运算符 ::.

阅读详情click here

【讨论】:

  • “不支持使用类名以外的东西。”证明是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多