C++使用Class作为变量

Kar*_*awi 2 c++ variables class operator-overloading operators

所以我有一个类似这个的类:

class CVal {
public:
    void operator=(int n) {
        d = n;
    }
private:
    int d;
};
Run Code Online (Sandbox Code Playgroud)

现在每当我做类似的事情

CVal c;
switch(c) {...}
Run Code Online (Sandbox Code Playgroud)

我想要访问CVal :: d,那我该怎么做呢?我想过重载一些操作员,但我找不到任何东西.

Vla*_*cow 12

您应该像这样定义转换运算符

class CVal {
public:
    //...
    operator int() const { return d; }
private:
    int d;
};
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个支持C++ 2014的编译器,那么您可以通过以下方式定义它

class CVal {
public:
    //...
    operator auto() const { return d; }
private:
    int d;
};
Run Code Online (Sandbox Code Playgroud)

根据C++标准(6.4.2开关语句)

2条件应为整数类型,枚举类型或类类型.如果是类类型,则将条件在上下文中隐式转换(第4节)为整数或枚举类型.整体促销活动......

  • 原因:switch语句中的表达式必须是整数类型.`CVal`不是整数类型,但如果隐式转换可用,编译器将使用它. (4认同)