C++ 重载==和!=,但程序只使用前者

C++ 重载==和!=,但程序只使用前者,c++,visual-studio-2017,inline,C++,Visual Studio 2017,Inline,我的代码是这样的 template <typename T> class FArray { /* ... */ inline bool operator == (const FArray& b) const { return std::equal(begin(),end(),b.begin()); } inline bool operator != (const FArray& b) const {

我的代码是这样的

template <typename T>
class FArray
{
/* ... */
    inline bool operator == (const FArray& b) const
    {
        return std::equal(begin(),end(),b.begin());
    }
    inline bool operator != (const FArray& b) const
    {
        return !(*this == b);
    }
};
模板
类远射线
{
/* ... */
内联布尔运算符==(常量FArray和b)常量
{
返回std::equal(begin(),end(),b.begin());
}
内联布尔运算符!=(常量FArray和b)常量
{
返回!(*this==b);
}
};
然后我有一些单元测试,我在测试等式和不等式

FArray<double> a, b, c;
/* ... */
ASSERT_TRUE(a == b)
ASSERT_TRUE(a != c)
farraya,b,c;
/* ... */
断言为真(a==b)
断言为真(a!=c)
第二个断言没有使用重载运算符
=,它只使用
==
,我想返回它的否定(我在重载函数中添加了一个断点,我的程序没有通过它)。但是如果我不重载其中一个,我就无法编译。这是标准行为吗?我在网上找不到与此相关的任何信息


我使用VisualStudio 2017(C++),用Visual C++ 2017—-03696000—00—1—AA639。

< P>使用<代码>运算符==/COD> >,因为它在<代码>运算符> = <代码>

它只使用
运算符==
,因为
运算符=可能是

不执行函数调用CPU指令将控制转移到函数体,而是在不生成调用的情况下执行函数体的副本

如果是这样的话,您将看不到调用

还值得注意的是,函数是否内联取决于编译器;这不是保证

由于关键字
inline
的这一含义是非绑定的,编译器可以自由地对任何未标记为inline的函数使用inline替换,并且可以自由地对任何标记为inline的函数生成函数调用


另一方面,您的
操作符==
函数可能应该比较“数组”和参数的大小。如果
b
小于
的“数组”,则您将超出
b.end()
,这可能会导致未定义的行为。它是否也发生在调试模式下?@Yola它不保证,并且取决于编译器。