过载==和!=,但是程序仅使用前者
Overloading == and !=, but program only use the former
我的代码看起来像
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<double> a, b, c;
/* ... */
ASSERT_TRUE(a == b)
ASSERT_TRUE(a != c)
第二个断言不使用过载的运算符!=
,它仅使用==
,我认为返回其否定(我在重载函数中添加了一个断点,我的程序不会贯穿它(。但是,如果我不超载一个或另一个,我就无法编译。是标准行为吗?我找不到有关此在线的任何相关信息。
我正在使用Visual Studio 2017 15.5.6,带有Visual C 2017-00369-60000-00001-AA639。
使用operator==
,因为它在operator!=
中调用。
它使用仅 operator==
,因为 operator!=
可能会被夹住,
而不是执行函数呼叫CPU指令将控件传输到功能主体,而是执行功能体的副本而无需生成呼叫。
,如果是这种情况,您将不会看到调用。
也值得注意的是,该函数是内衬的还是不取决于编译器;不能保证。
由于关键字
inline
的这种含义是非绑定的,因此编译器可以免费使用内联替换为未标记内联标记的函数,并且可以自由地为标记为内联函数的任何函数生成函数调用。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- ostream过载时的缓冲区冲洗
- 安全回调提供程序(SFINAE,std::正向和过载解析)
- 过载==和!=,但是程序仅使用前者
- 如何使程序使用功能过载用于派生的类对象
- 我的时间程序不会过载.为什么
- 为什么一个程序被拒绝为可以通过过载解决来解决的模糊程序