operator& 那 returns 一个 int 并在 2 个向量上运行?
operator& that returns an int and operates on 2 vectors?
我想在两个 std::vector<int>
之间定义一个 &
运算符。此运算符应按位将两个向量的每个元素放在一起,并且 return 结果向量的非零分量的数量。
但是,如果我定义 int operator&(const std::vector<int> &lhs, const std::vector<int> &rhs)
,编译器不喜欢它并且需要 operator&
到 return 一个布尔值。这实际上是 operator&
的限制吗?
I would like to define an & operator between two std::vector<int>
.
你可能不会(至少不是全局的;理论上它可以在自定义命名空间中完成,但我建议不要这样做)。没有用户定义类型参数的标准模板的运算符重载保留给标准库。
我建议改为编写常规函数。
Any idea why there's that restriction?
因为此限制允许标准库更改和添加委员会希望的任何运算符重载,而不会破坏先前定义良好的程序,这些程序具有自己的冲突重载(由于不允许定义此类重载)。
operator& to return a boolean. Is this actually a restriction with operator&?
没有。这其实不是二元运算符&的限制。它可能 return int
.
我想在两个 std::vector<int>
之间定义一个 &
运算符。此运算符应按位将两个向量的每个元素放在一起,并且 return 结果向量的非零分量的数量。
但是,如果我定义 int operator&(const std::vector<int> &lhs, const std::vector<int> &rhs)
,编译器不喜欢它并且需要 operator&
到 return 一个布尔值。这实际上是 operator&
的限制吗?
I would like to define an & operator between two
std::vector<int>
.
你可能不会(至少不是全局的;理论上它可以在自定义命名空间中完成,但我建议不要这样做)。没有用户定义类型参数的标准模板的运算符重载保留给标准库。
我建议改为编写常规函数。
Any idea why there's that restriction?
因为此限制允许标准库更改和添加委员会希望的任何运算符重载,而不会破坏先前定义良好的程序,这些程序具有自己的冲突重载(由于不允许定义此类重载)。
operator& to return a boolean. Is this actually a restriction with operator&?
没有。这其实不是二元运算符&的限制。它可能 return int
.