Java inline int swap.为什么这只在 Java 中有效
Java inline int swap. Why does this only work in Java
我被要求在不使用临时变量或使用xor的情况下编写交换,我想出了这个。
在Java中,这有效,但在C/C++中这不起作用。
我的印象是这总是有效的,因为"|"左侧的"a"值将存储在寄存器中,然后会发生对"a"的赋值,从而抵消对"b"的分配值的影响。
int a = 5;
int b = -13;
b = a | (0 & (a = b));
您正在修改变量并在没有干预序列点的情况下读取其值。
b = a + 0 * (a = b);
// reading a's value modifying a
这是未定义的行为。 您无权对代码将要做什么有任何期望。
C/C++ 编译器优化表达式0 * (a = b)
,以简单地0
将代码片段转换为:
int a = 5;
int b = -13;
b = a;
在 C/C++ 中,同理解是按表达顺序执行的。在 Java 中,无论其他表达式如何,赋值都最后发生。
例如,这在 C 中递增,但在 Java 中什么都不做。
a = a++;
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 如何在 c++ 和 java 之间通过 udp 有效地发送数据数组
- 将Boost::uint64转换为Java的最有效方法
- Java inline int swap.为什么这只在 Java 中有效
- 迭代 Java 集合和对元素进行一些转换的有效方法
- 将无符号字符* 作为 byte[] 从 C++ 传递到 java 的最有效方法
- 在Java或C++等编程语言中有效地模拟SQL的group by子句,而不是求助于RDBMS
- 修改双精度的最低有效位(Java和c++)
- 有效的Java构建器习语等同于c++
- 这样做有效吗?(c, c++, java)
- c++ /JAVA:有效地在集合中找到包含给定值的集合
- Java 套接字数据仅在发送时间延迟时有效