-1

为什么以下代码行不会产生错误?

double x = 4.2, y;

此外,x 似乎分配给 4.2,而不是 y 的值(似乎是 1e-39,或非常接近 0)。

4

7 回答 7

14

它与以下内容相同:

double x = 4.2;
double y;

“y”变量包含一些垃圾值(因为它的值未指定),直到你给它一个值。这样做是因为逗号运算符的优先级低于 C/C++ 中的赋值。

于 2013-08-02T18:10:11.763 回答
8

它是两个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是无用的。

于 2013-08-02T18:11:04.367 回答
3

它是一个带有初始值的声明,x并且没有初始值 for y(值 fory将是未指定的,取决于编译器)。

这些都是合法的语法:

double x, y;
double x = 4.2;
double x = 4.2, y;

我个人更喜欢将我的声明分开,例如:

double x = 4.2;
double y;

我发现它更容易理解,并且如果其中一种类型发生更改或需要额外注释,则更容易修改。

于 2013-08-02T18:08:58.610 回答
3

,这里不是逗号运算符。它是分隔 x(分配给 4.2)和 y 的声明的分隔符。

于 2013-08-02T18:10:31.633 回答
1

您正在声明 2 个 type 变量double,但您只是为其分配了一个值xy保持未初始化并且可以包含任何值。,使用;分隔名称声明多个相同类型的变量是有效的语法。

于 2013-08-02T18:10:21.093 回答
1

声明赋值允许您在一行中声明多个变量:

string s1;
string s2;
string s3 = "test";

是相同的:

string s1, s2, s3 = "test"
于 2013-08-02T18:11:46.470 回答
1
double x = 4.2, y;

声明xdouble 类型的变量并使用值 4.2 对其进行初始化,并声明另一个名为y. 注意:为什么当前没有值。你的陈述也可以写成

double y, x = 4.2;
于 2013-08-02T18:13:07.983 回答