为什么operator ==不能自动为C ++中的嵌套类合成

如果我尝试编译:

class Outer 
{
    class Inner 
    {
        int t;
    };
public:
    Inner inner_;
    bool operator ==(Outer rightSide);
};

bool Outer::operator ==(Outer rightSide)
{
    if (inner_ == rightSide.inner_)
        return true;
    return false;
}

我收到一个错误:

/home/martin/Projects/Experimentation/Various-build-desktop/../Various/main.cpp:18: 
error: no match for ‘operator==’ in ‘((Outer*)this)->Outer::inner_ == 
rightSide.Outer::inner_’

请问,这只是我做错了什么,或者这是C ++的一个属性

编辑:

哦,我从来没有意识到operator ==从来就不是合成的,我确信它是合成的,所以我没有麻烦去检查。
谢谢Parapura Rajkumar!


比较运算符永远不会隐式生成。 只有这些东西是:

  • 默认的构造函数,
  • 析构函数,
  • 复制并移动构造函数,
  • 复制分配和移动赋值操作符
  • 如果你想能够比较你的类型,你必须编写你自己的比较操作符。 如果你将它们作为成员实现,那么它们应该被声明为const ; 否则,将无法比较常量对象。 您也可以考虑将参数作为常量引用来避免不必要的复制; 对于这些类型的简单类型几乎没有什么区别,但对于大型或复杂类可以更有效。 就像是:

    bool Outer::operator==(Outer const & rhs) const {
        return inner_.t == rhs.inner_.t;
    }
    

    或作为非会员功能:

    bool operator==(Outer const & lhs, Outer const & rhs) {
        return lhs.inner_.t == rhs.inner_.t;
    }
    

    您没有为class Inner定义operator== 。 所以你的代码应该是:

    class Outer
    {
        class Inner
        {
            int t;
        public:
            bool operator == (Inner inner)
            {
                return t == inner.t;
            }
        };
    public:
        Inner inner_;
        bool operator == (Outer rightSide);
    };
    
    bool Outer::operator == (Outer rightSide)
    {
        return inner_ == rightSide.inner_;
    }
    
    链接地址: http://www.djcxy.com/p/73775.html

    上一篇: Why is operator == not automatically synthesized for nested classes in C++

    下一篇: Comparison between two objects under the same class