【问题标题】:operator& that returns an int and operates on 2 vectors?operator& 返回一个 int 并对 2 个向量进行操作?
【发布时间】:2020-09-16 04:11:52
【问题描述】:
我想在两个std::vector<int> 之间定义一个& 运算符。此运算符应按位将两个向量的每个元素放在一起,并返回结果向量的非零分量的数量。
但是,如果我定义int operator&(const std::vector<int> &lhs, const std::vector<int> &rhs),编译器不喜欢它,需要operator& 返回一个布尔值。这实际上是operator& 的限制吗?
【问题讨论】:
标签:
c++
operator-overloading
【解决方案1】:
我想在两个 std::vector<int> 之间定义一个 & 运算符。
您可能不会(至少不是全局性的;理论上可以在自定义命名空间中完成,但我建议不要这样做)。没有用户定义类型参数的标准模板的运算符重载保留给标准库。
我建议改为编写一个常规函数。
知道为什么会有这种限制吗?
因为此限制允许标准库更改和添加委员会希望的任何运算符重载,而不会破坏先前定义良好的程序,这些程序具有自己的冲突重载(由于不允许定义此类重载)。
operator& 返回一个布尔值。这实际上是对 operator& 的限制吗?
没有。这实际上不是二元运算符&的限制。它可能会返回int。