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它不保证,并且取决于编译器。