【问题标题】:Difference between int a,b = 0 and int a=0, int b = 0 [duplicate]int a,b = 0 和 int a=0,int b = 0 [重复]
【发布时间】:2015-03-20 01:07:15
【问题描述】:

以下两个代码块有区别吗?

int a, b, c  = 0;

和

int a = 0; int b = 0; int c = 0;

是完全一样还是有一些不同?

【问题讨论】:

  • 您是对= 0 案特别感兴趣,还是对其他案子也感兴趣?
  • 专为=0
  • 如果你有int a = 0, b = 0, c = 0;也会一样

标签: c# variables


【解决方案1】:

没有。默认情况下不一样。

public void AMethod()
{
    int a;
}

不初始化你的变量,这不是一个类字段,你不能使用这个变量,直到它在这个方法中得到它的值。

如果你有这样的类定义:

class A
{
    int a;
}

然后,在创建A 对象期间,a 字段将在内部初始化为default(int) 值,即0。

【讨论】:

  • 当然,ints default value 是 0
  • 或者,为了使这同样适用于变量和字段 - 第一个版本没有为 a 和 b 分配任何东西,只是 c。
  • 它确实初始化了,但是 VS 可能会给你一个编译警告,告诉你有一个变量没有赋值。
  • @oscilatingcretin 不正确。如果在赋值之前尝试使用变量,代码将无法编译。
  • @PhilipKendall 使用编译器。它不编译。你读错了规范:)
【解决方案2】:

对于您的第一个代码块int a, b, c = 0;,您没有初始化原始类型。你不能使用 a 和 b 直到它被分配了一些东西,如果是 a = default(int) 或者只是 a = 0 。在第一次分配之前,您会收到一个编译错误,即必须在首次使用之前分配变量。

现在,如果您比较 int a = 0, b = 0, c = 0 和 int a = 0; int b = 0; int c = 0;,它们是相同的。这两个语句的 IL 是相同的:

IL_0001:  ldc.i4.0    
IL_0002:  stloc.0     // a
IL_0003:  ldc.i4.0    
IL_0004:  stloc.1     // b
IL_0005:  ldc.i4.0    
IL_0006:  stloc.2     // c

分配给 default 值而不是 0 也没有区别(即:int a = default(int);)。

【讨论】:

  • 你没有覆盖类字段初始化规则。
  • 而 OP 正在询问原始类型的初始化。
  • 他从来没有说过这个代码块在哪里。它在方法代码块和类声明中的行为不同。
  • 完全同意两者的区别。上下文绝对是主观的。
猜你喜欢
  • 2017-01-21
  • 2014-10-19
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2019-12-18
  • 2016-06-02
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多