gpt4 book ai didi

c++ - 为什么运算符 == 不会自动为 C++ 中的嵌套类合成

转载 作者:行者123 更新时间:2023-11-30 03:04:05 25 4
gpt4 key购买 nike

如果我尝试编译:

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++ 的属性

编辑:

哦,我从来没有意识到运算符 == 从来没有合成过,我坚信它是合成的,所以我懒得去检查。
谢谢 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;
}

关于c++ - 为什么运算符 == 不会自动为 C++ 中的嵌套类合成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com