我想知道用 C 语言计算什么更好:
if (x==0)
{
// Some code ...
}
的
if (0==x)
{
// Some code ...
}
我知道最后一个更好,以防程序员忘记第二个“=”并写“0 = x”而不是“0 == x”,因为编译器会抛出错误。
但我的问题是:
我认为这与“左值”和“右值”有关,我尝试在我的 PC 中进行模拟,但没有明显的见解。
没有一般的答案。实际计算时间取决于目标系统和编译器及其优化。
如果禁用 all 优化,您可能会观察到生成不同的机器代码,并且 可能 可能有不同的计算时间。
然而,现代编译器以多种方式优化您的代码。您可以期望这两个变体生成相同的机器代码。
为了确定您的系统,编译两个变体并查看生成的机器代码。认真的编译器有选项或工具来生成列表。
结论: 如果您没有遇到性能问题,不要进行微优化。以最好的方式编写源代码,以防止人为错误,并且最容易理解。 (顺便说一句,Yoda 条件 往往更难理解。)
术语“右值”在标准中只使用了两次,一次在注释中:
有时称为“右值”的内容在本文档中被描述为“表达式的值”。
第二次在索引中,指向这张纸条。显然它不再被使用了。
相等运算符不区分其操作数。两者都是同类。