我在这里使用了 C++ 语法和标签,但这种现象可以适用于任何编程语言。
这是关于条件分支的一个相当小众的方面,所以请耐心等待。 我知道一些类似的重复问题,但它们没有深入解决这一现象。
如果我们谈论机器级别,分支会立即发生。 当满足某个条件时,将采取一条执行路径,当满足该条件的否定时,将采取替代分支。为了进一步扩展这一点,
短路评估机器没有花时间思考,“哦,条件没有满足 - 这意味着满足!(条件),意味着执行另一个分支!”。机器的行为是计算“固有”的。简化到极端,有电压,去这里...不存在,去那里。
一些编程语言通过
和switch语句来利用这一点。 通常,这没什么大不了的,总体上可以被视为理所当然/忽略。但是,请考虑这一点(
也可以应用于结构,真的),
。
类有一个color属性(它是std::string),我可以使用经典的getter和setter函数获取和设置它。
Ball 对象的数组。
如果球颜色为
。
案例一:
if(ball_array[i].getColor().compare("red") == 0)
{
std::cout << "Red! Yay!" << std::endl;
}
else
{
ball_array[i].setColor("black");
}
案例2:
if(ball_array[i].getColor().compare("blue") == 0)
{
ball_array[i].setColor("black");
}
else
{
std::cout << "Red! Yay!" << std:endl;
}
我想说这是有区别的,后者会减慢程序速度。
我愿意承认,对于完全编译
语言来说,两段代码实际上可能没有区别,但是,我仍然认为对于解释语言,从代码到机器代码的翻译不是1由于必须实时解析源代码,因此变为 1。根据解析树结构,其中一个或另一个将先出现并放弃瞬时分支。 我的假设正确吗?为什么?
一个简单的答案,即使在解释语言中,差异也应该绝对为零,因为无论您要比较什么以及它有多常见,您仍然需要调用比较函数(或其等效函数)。即使存在差异,也非常小,根本不重要,除非你有数万亿张支票,我想你没有