非成员运算符 == 我可以将其设为静态吗?

non-member operator == can i make it static?

本文关键字:静态 成员 运算符 我可以      更新时间:2023-10-16

我首先在头文件中以这种风格编写了一个非成员运算符 == 函数:

bool operator==(
  const Node& lhs,
  const Node& rhs)
{
  return lhs.uid == rhs.uid;
}

但是由于它的多重定义,它编译失败了。我尝试两种方法,它们都有效。1 将实现移动到 cpp 文件2 使此运算符 == 静态函数。

大多数搜索结果都在讨论第一个解决方案。但是我可以让它成为静态的吗?哪一个更好?

提前感谢~

如果您已将函数放在头文件中,则需要使其inline。否则,编译器将在使用它的任何源文件中吐出它的单独副本,从而导致链接器冲突。

inline bool operator==(
  const Node& lhs,
  const Node& rhs)
{
  return lhs.uid == rhs.uid;
}