我总是不敢这样编码:
void func( some_struct* ptr ) {
if ( ptr != nullptr && ptr->errorno == 0 )
do something...
};
相反,我总是这样:
void func( some_struct* ptr ) {
if ( ptr != nullptr )
if ( ptr->errorno == 0 )
do something...
};
因为恐怕在C ++标准中未指定逻辑运算符&&的求值顺序,尽管通常我们可以用当今几乎所有的编译器获得正确的结果。在a book中,有2条规则让我想确切了解一下。
我的问题是:在不重载的情况下,逻辑运算符“ &&”和“ ||”的求值顺序确定吗?
抱歉,我的英文很丑,我是中国人。对于是否有重复的主题,我深表歉意,因为我无法指出要搜索的正确关键字。还是谢谢!
是的,通过标准保证内置逻辑AND运算符和逻辑OR运算符。
&&运算符从左到右分组。操作数都在上下文中转换为bool。如果两个操作数均为true,则结果为true,否则为false。与&不同,&&保证从左到右求值:如果第一个操作数为false,则不对第二个操作数求值。
||操作员组从左到右。操作数都在上下文中转换为bool。如果其两个操作数中的任何一个为true,则结果为true,否则为false。与|,||不同保证从左到右的评估;此外,如果第一个操作数的值为true,则不评估第二个操作数。