C++中的短路求值是什么?C++逻辑运算符(&&, ||)效率陷阱【语言细节】

admin 百科 20
短路求值是C++标准强制规定的行为:&&左侧为false时跳过右侧,||左侧为true时跳过右侧;用于避免空指针解引用等错误,但会使右侧副作用不执行。

C++中的短路求值是什么?C++逻辑运算符(&&, ||)效率陷阱【语言细节】-第1张图片-佛山资讯网

短路求值(Short-circuit Evaluation)是指 C++ 中逻辑与 && 和逻辑或 || 运算符在确定整体结果后,**不再计算右侧操作数**的行为。这不是优化技巧,而是语言标准强制规定的求值顺序和行为,直接影响程序正确性与性能。

短路规则:什么时候不执行右边?

&&:左边为 false 时,整个表达式必为 false,跳过右边;
||:左边为 true 时,整个表达式必为 true,跳过右边。

例如:

int* p = nullptr;
if (p != nullptr && p->value > 0) { ... }  // 安全:p 为空时不会解引用
if (p->value > 0 && p != nullptr) { ... }  // 危险:先解引用空指针,未定义行为!

登录后复制

效率陷阱:副作用被跳过,可能出乎意料

如果右侧表达式有副作用(如函数调用、自增、IO),短路会导致这些副作用**完全不发生**——这常被误认为“bug”,实则是符合标准的预期行为。

立即学习“C++免费学习笔记(深入)”;

标签: c++

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~