这会有用吗?
double a = 2.0,
x, y, z = 0.50;
第二行代码是否正常工作并将x,y,z分别初始化为0.50?
答案 0 :(得分:11)
您的代码未初始化x
和y
。但是,轻微的重新排列可以避免重复初始值:
double a = 2.0, x = 0.50, y = x, z = x;
声明中先前声明的变量属于后面声明的范围。
在评估一个初始化程序可能具有非平凡的运行时成本时,这有时特别有用。例如,在以下嵌套循环中m
是多重映射:
for (auto it = m.begin(), kt = it, e = m.end(); it != e; it = kt)
{ // ^^^^^^^^^^^^^^^^^^^^^^^
// handle partition
for (; kt != e && kt->first == it->first; ++kt)
{
// ... handle equal-range
}
}
答案 1 :(得分:4)
不,只会初始化z
。你必须这样写:
double x = 0.50, y = x, z = x;
但你可以写一个这样的作业:
double x, y, z;
x = y = z = 0.50;
答案 2 :(得分:3)
简单地说,只有 z 才会被初始化。
如果您之后尝试打印
std::cout << a << " " << x << " " << y << " " << z;
你会从编译器那里得到这种警告:
警告:'x'在此功能中未初始化
为了清楚起见,我将使用Rabbid76建议的第二个选项:
double x, y, z;
x = y = z = 0.50;
答案 3 :(得分:2)
如果您想分配所有三个变量,请写
x = y = z = 0.5;
相当于
x = (y = (z = 0.5));
您提供的代码指定至z
。
答案 4 :(得分:1)
第二行代码:
double x;
x = 50.1;
实际上有一个返回值。通常,它没有被捕获或使用,但它存在。所以x = 50.1
返回值50.1。
这意味着你可以这样做:
double x,y,z;
x = y = z = 50.1;
并且该值将在x = y
返回的链中向上移动,并且值不会再次被捕获。执行该行后,x,y和z都将具有值50.1。
答案 5 :(得分:1)
你可以实现你想做的事: x = y = z = 0.50;
答案 6 :(得分:0)
你可以像这样在一行中完成:
double x = 0.5, y = 0.5, z = 0.5;