它的目的是重载方法中的操作,但它的真正目的是什么?
class CModeType
{
public:
CModeType(){m_nModeType=1;}
~CModeType(){}
int m_nModeType;
CModeType& operator&&( const CModeType& rModeType );
};
CModeType& CModeType::operator &&( const CModeType& rModeType )
{
this->m_nModeType += rModeType.m_nModeType;
return *this;
}
int _tmain(int argc, _TCHAR* argv[])
{
CModeType Mode;
CModeType Mod2;
Mode && Mode;
cout << Mode.m_nModeType << endl; //output:2
return 0;
}
我也会问||
但我相信答案会帮助我理解它。
答案 0 :(得分:6)
但是它的真正目的是什么?
在这种情况下,其目的是使代码的可读性和反直觉性。
在实践中,很少有情况需要重载逻辑AND运算符(这是问题标题的答案)。这不是他们的一部分。
通常,operator &&
应标记为const
,因为您不期望它,也不应该修改对象。在这种情况下,它不是,它确实如此。从逻辑上讲,你真的期望在你做完之后
a && b
a
被修改了吗? 不!严重滥用该语言。
答案 1 :(得分:5)
对于内置类型,&&
运算符是“逻辑 - 和”,因此x && y
当且仅当x
和y
都为真时才为真在布尔上下文中计算时。
对于内置类型,&&
运算符是短路的,因此如果第一个参数已经为假,则永远不会评估第二个参数,因此您可以这样说if (p && *p == 10)
没有冒着空指针解除引用的风险。对于用户定义类型的重载operator&&
,这不是真的,它只是一个普通函数(因此参数以不确定的顺序计算)。小心!
答案 2 :(得分:0)
这意味着逻辑and
- 运营商。在代码if (a && b) { ... }
中,如果...
和a
都为真,则会执行b
。
在您的代码中,您正在重载运算符,因此您在CModeType& operator&&( const CModeType& rModeType )
实现中定义了一个全新的目的。它将m_nModeType与this
和rModeType
(参数)相加,然后返回指向this
的指针。对我来说似乎很愚蠢和不合逻辑,我建议不要这样做。