如何将C ++中的多个变量初始化为相同的值?

时间:2016-03-08 20:16:42

标签: c++ c++11

这会有用吗?

double a = 2.0,
x, y, z = 0.50;

第二行代码是否正常工作并将x,y,z分别初始化为0.50?

7 个答案:

答案 0 :(得分:11)

您的代码未初始化xy。但是,轻微的重新排列可以避免重复初始值:

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;