为什么以下代码行不会产生错误?
double x = 4.2, y;
此外,x似乎被分配到4.2,而不是y的值(似乎是1e-39,或非常接近0)。
答案 0 :(得分:14)
它与:
相同double x = 4.2;
double y;
" y"变量包含一些垃圾值(因为它的值未指定),直到你给它一个值。它的行为方式是因为逗号运算符的优先级低于C / C ++中的赋值。
答案 1 :(得分:8)
这是两个double
个对象的声明,一个名为x
,初始化为4.2
,另一个名为y
,未初始化。
更明确地写为:
double x = 4.2;
double y;
如果它出现在文件范围内,y
会隐式初始化为0.0
;否则它的价值就是垃圾。
如果您想要分配,则必须删除double
关键字,例如:
x = 4.2;
如果你写了:
x = 4.2, y;
然后,
将是一个逗号运算符,由于逗号的优先级低于=
,因此它等同于:
(x = 4.2), y;
或:
x = 4.2;
y;
在这种情况下,对y
的引用毫无用处。
答案 2 :(得分:3)
这是一个声明,其初始值分配给x
,而y
没有初始值(y
的值将不指定,取决于编译器。)
这些都是合法的语法:
double x, y;
double x = 4.2;
double x = 4.2, y;
我个人更喜欢将我的声明分开,例如:
double x = 4.2;
double y;
我发现它更容易理解,如果其中一种类型发生变化或需要额外评论,则更容易修改。
答案 3 :(得分:3)
,
不是逗号运算符。它是分隔声明x(分配给4.2)和y。
答案 4 :(得分:1)
您要声明2个double
类型的变量,但您只是将值分配给x
。 y
仍未初始化,可能包含任何值。声明具有由,
;
答案 5 :(得分:1)
声明分配允许您在一行中声明多个变量:
string s1;
string s2;
string s3 = "test";
与:
相同string s1, s2, s3 = "test"
答案 6 :(得分:1)
double x = 4.2, y;
声明{double}类型的x
变量并使用值4.2初始化它,并声明另一个名为y
的变量。注意:为什么目前没有值。
您的陈述也可以写成
double y, x = 4.2;