Java和C++运算符之间有什么区别吗?

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中,它们可以是按位或逻辑运算符,具体取决于上下文.


Ste*_*sop 5

Java指定了更多关于表达式的评估顺序而不是C++,并且如果表达式的任何合法评估顺序在序列点之间两次修改对象,则C++表示您会得到未定义的行为.

因此,i++ + i++在Java中定义良好,但在C++中具有未定义的行为(无需诊断).因此,您不能盲目地将表达式从Java复制到C++.

对于按位运算符,Java指定负数的二进制补码表示,而C++则不指定.并不是说您可能会在C++中遇到另一种表示形式,但如果您这样做,那么您会发现例如-2 | 1始终-1使用Java,但是-2使用1s补码进行C++实现.