下面显示的两种声明变量的方式是否相同?
int aa= 0, bb= 0, cc= 0, dd= 0;
int aa= 0;
int bb= 0;
int cc= 0;
int dd= 0;
下面显示的两种声明变量的方式是否相同?
int aa= 0, bb= 0, cc= 0, dd= 0;
int aa= 0;
int bb= 0;
int cc= 0;
int dd= 0;
是的,这个:
int aa = 0, bb = 0, cc, dd;
与以下更常见和可读的版本完全相同:
int aa = 0;
int bb = 0;
int cc;
int dd;
正如Soner Gönül 所示,它们产生相同的 IL 代码。
但是你问了一个很好的问题,因为事情可能比这更微妙。
在不安全的 C# 中,您可以使用指针。指向整数的指针写为int*
。所以当你想声明三个类型的变量时int*
,你可以这样写:
int* aa, bb, cc;
这正确地代表了您的意图:
int* aa;
int* bb;
int* cc;
但是,指针的语法来自更古老的 C 语言,如果您在 C 中声明三个指针变量,如下所示:
int* aa, bb, cc;
那么这意味着一些微妙的不同,你实际上已经写过:
int* aa;
int bb;
int cc;
这就是为什么 C 开发人员会int *aa
改为编写,以表明它只是aa
一个指针类型,其余的都是普通整数。
int *aa, bb, cc;
但是,我不鼓励您完全用 C 编写这样的东西:它令人困惑。
在 Visual Basic.NET 中,您还可以在一行上声明变量:
Dim aa, bb As Integer
这与以下内容相同:
Dim aa As Integer
Dim bb As Integer
但是,如果您使用 Visual Basic(VB.Net 的前身)进行编程,那么:
Dim aa, bb As Integer
方法:
Dim aa As Any 'aa Is Variant
Dim bb As Integer
他们是一样的。我认为,一旦您的名字更具描述性,第二个选项可能更容易阅读。
C#支持单个语句可以分配多个局部变量
一条语句可以分配多个局部变量。源自 C 风格语法的语言通常允许您使用逗号在一个语句中声明多个变量。C# 语言允许这样做。
从8.5.1 Local variable declarations
声明多个变量的局部变量声明等价于同一类型的单个变量的多个声明。此外,局部变量声明中的变量初始值设定项完全对应于在声明之后立即插入的赋值语句。
第一个IL
代码;
.locals init ([0] int32 aa,
[1] int32 bb,
[2] int32 cc,
[3] int32 dd)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldc.i4.0
IL_0004: stloc.1
IL_0005: ldc.i4.0
IL_0006: stloc.2
IL_0007: ldc.i4.0
IL_0008: stloc.3
IL_0009: ret
二一IL
码;
.maxstack 1
.locals init ([0] int32 aa,
[1] int32 bb,
[2] int32 cc,
[3] int32 dd)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldc.i4.0
IL_0004: stloc.1
IL_0005: ldc.i4.0
IL_0006: stloc.2
IL_0007: ldc.i4.0
IL_0008: stloc.3
IL_0009: ret