Seb*_*iot 8 c++ java operators
如果你使用Java的原始数字类型,加上布尔值,并将它与C++等效类型进行比较,那么运算符有什么区别,例如优先级规则或位操作运算符的作用是什么?还是括号的影响?
问另一种方法,如果我使用Java表达式并尝试在C++中编译并运行它,它是否总是编译并始终给出相同的结果?
Oli*_*rth 11
对于像这样的表达式:
a = foo() + bar();
Run Code Online (Sandbox Code Playgroud)
在Java中,评估顺序是明确定义的(从左到右).C++不指定是否foo()或bar()首先被计算.
像:
i = i++;
Run Code Online (Sandbox Code Playgroud)
在C++中未定义,但在Java中再次定义良好.
在C++中,对负数执行右移是实现定义/未定义的; 而在Java中它是明确定义的.
另外,在C++中,运营商&,|和^纯粹是按位运算符.在Java中,它们可以是按位或逻辑运算符,具体取决于上下文.
Java指定了更多关于表达式的评估顺序而不是C++,并且如果表达式的任何合法评估顺序在序列点之间两次修改对象,则C++表示您会得到未定义的行为.
因此,i++ + i++在Java中定义良好,但在C++中具有未定义的行为(无需诊断).因此,您不能盲目地将表达式从Java复制到C++.
对于按位运算符,Java指定负数的二进制补码表示,而C++则不指定.并不是说您可能会在C++中遇到另一种表示形式,但如果您这样做,那么您会发现例如-2 | 1始终-1使用Java,但是-2使用1s补码进行C++实现.
| 归档时间: |
|
| 查看次数: |
3928 次 |
| 最近记录: |