java - 后缀自赋值行为是否在 C#/Java 中严格定义?

标签 java c# c++ postfix-operator

我知道以下代码已知会在 C/C++ 中产生未定义的行为

   int i = 1;
   i = 2*i++;
   cout << i << endl; // surprisingly 3, undefined...

它在 Java/C# 中生成预期结果 2。但这是 Java/C# 中的保证还是未定义的行为?

最佳答案

在 C# 中,这是非常明确的定义。

  1. 它递增变量。
  2. 它将旧值赋给变量

所以变量的值保持不变。对于您的案例,结果将为 2。

 i = i++

这是一样的

   t = i
   i = i + 1
   i = t

这种表达式作为复合语句的一部分时会变得非常困惑。从长远来看,保持表达式简单,减少自己和他人的混淆是非常明智的。

Java 和 C# 中的表达式都是从左到右求值的

关于java - 后缀自赋值行为是否在 C#/Java 中严格定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913593/

相关文章:

java - 如何在 Gitlab 中运行 headless Chrome

java - 从 Drawable Resource Id 解码位图给出 null

java - 解析数学表达式给出错误的树

C# 和 MongoDriver - 如何从外部集合中获取值(聚合 + 查找)?

c++ - 在 Visual Studio 单元测试中检查内存泄漏

c++ - Const 类成员复制构造函数

c++ - 尝试链接 libFlurryAds 时链接器错误 Duplicate Symbol

java - 使用 application.yml 中的属性从 spring data mongodb 注入(inject) @Document 中的集合名称

c# - 如何使用 htmlhelper 为千位添加逗号

c# - 有没有办法在不关闭 StreamWriter 的情况下关闭其 BaseStream?