为什么我不能在一个类中有这两个重载?

2 c++

在下面的代码中,如果我注释掉它aaa或者bbb它将编译.为什么我不能同时拥有?

#include <iostream>

class MyClass
{
private:
    typedef void (MyClass::*aaa)() const;
    typedef void (MyClass::*bbb)() const;
    void ThisTypeDoesNotSupportComparisons() const {}
public:
    operator aaa() const { return (true) ? &MyClass::ThisTypeDoesNotSupportComparisons : 0; }
    operator bbb() const { return (true) ? &MyClass::ThisTypeDoesNotSupportComparisons : 0; }
};

int main()
{
    MyClass a;
    MyClass b;

    if(a && b) {}
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*her 6

你的typedef aaabbb是相同的.因此,您的转换运算符实际上声明了相同的功能.

从本质上讲,编译器会看到

operator void (MyClass::*)() const { ... }
Run Code Online (Sandbox Code Playgroud)

两次,一次aaa,一次bbb.

  • 换句话说:与关键字`typedef`所说的相反,C++中的`typedef`并不真正_define_一个新类型,它只是为现有类型创建一个别名. (4认同)