为什么以下代码行不会产生错误?
double x = 4.2, y;
此外,x 似乎分配给 4.2,而不是 y 的值(似乎是 1e-39,或非常接近 0)。
它与以下内容相同:
double x = 4.2;
double y;
“y”变量包含一些垃圾值(因为它的值未指定),直到你给它一个值。这样做是因为逗号运算符的优先级低于 C/C++ 中的赋值。
它是两个double
对象的声明,一个名为x
,它被初始化为4.2
,一个名为y
,它没有被初始化。
它更清楚地写成:
double x = 4.2;
double y;
如果它出现在文件范围内,y
则隐式初始化为0.0
; 否则它的价值将是垃圾。
如果您想要一个assignment,则必须删除double
关键字,例如:
x = 4.2;
如果你写:
x = 4.2, y;
那么 the,
将是一个逗号运算符,并且由于逗号的优先级低于=
,它相当于:
(x = 4.2), y;
或者:
x = 4.2;
y;
在这种情况下,引用y
是无用的。
它是一个带有初始值的声明,x
并且没有初始值 for y
(值 fory
将是未指定的,取决于编译器)。
这些都是合法的语法:
double x, y;
double x = 4.2;
double x = 4.2, y;
我个人更喜欢将我的声明分开,例如:
double x = 4.2;
double y;
我发现它更容易理解,并且如果其中一种类型发生更改或需要额外注释,则更容易修改。
,
这里不是逗号运算符。它是分隔 x(分配给 4.2)和 y 的声明的分隔符。
您正在声明 2 个 type 变量double
,但您只是为其分配了一个值x
。y
保持未初始化并且可以包含任何值。,
使用;分隔名称声明多个相同类型的变量是有效的语法。
声明赋值允许您在一行中声明多个变量:
string s1;
string s2;
string s3 = "test";
是相同的:
string s1, s2, s3 = "test"
double x = 4.2, y;
声明x
double 类型的变量并使用值 4.2 对其进行初始化,并声明另一个名为y
. 注意:为什么当前没有值。你的陈述也可以写成
double y, x = 4.2;