如何使用C ++在一行中声明和定义多个变量?

时间:2011-07-27 01:11:25

标签: c++

我总是认为,如果我声明这三个变量,它们都将具有值0

int column, row, index = 0;

但我发现只有指数等于零&其他人像844553& 2423445。

如果不在新行上声明每个变量,如何将所有这些变量初始化为零?

10 个答案:

答案 0 :(得分:173)

int column = 0, row = 0, index = 0;

答案 1 :(得分:128)

宣布:

int column, row, index = 0;

只将index设置为零。

但是,您可以执行以下操作:

int column, row, index;
column = index = row = 0;

但我个人更喜欢以下指出的内容 在我看来,这是一种更具可读性的形式。

int column = 0, row = 0, index = 0;

int column = 0;
int row = 0;
int index = 0;

答案 2 :(得分:39)

正如@Josh所说,正确的答案是:

int column = 0,
    row = 0,
    index = 0;

你需要用指针注意同样的事情。这样:

int* a, b, c;

相当于:

int *a;
int b;
int c;

答案 3 :(得分:22)

如果每行声明一个变量/对象,它不仅可以解决这个问题,而且可以使代码更清晰,并在声明指针时防止出现愚蠢的错误。

要直接回答您的问题,您必须明确地将每个变量初始化为0。 int a = 0, b = 0, c = 0;

答案 4 :(得分:15)

int column(0), row(0), index(0);

请注意,此表单也适用于自定义类型,尤其是当它们的构造函数使用多个参数时。

答案 5 :(得分:4)

可能的方法:

  • 用零初始化所有局部变量。
  • 拥有数组memset{0}数组。
  • 使其全局或静态。
  • 将它们放入structmemset或者有一个可以初始化的构造函数 他们归零。

答案 6 :(得分:3)

从2k18开始,您可以使用Structured Bindings

#include <iostream>
#include <tuple>

int main () 
{
    auto [hello, world] = std::make_tuple("Hello ", "world!");
    std::cout << hello << world << std::endl;
    return 0;
}

Demo

答案 7 :(得分:1)

就像其他人提到的那样,从C ++ 17开始,您可以使用structured bindings进行多个变量分配。

将此与std::arraytemplate argument deduction结合使用,我们可以编写一个函数,该函数将一个值分配给任意数量的变量,而无需重复类型或值

#include <iostream>
#include <array>

template <int N, typename T> auto assign(T value)
{
    std::array<T, N> out;
    out.fill(value);
    return out;
}

int main()
{
    auto [a, b, c] = assign<3>(1);

    for (const auto& v : {a, b, c})
    {
        std::cout << v << std::endl;
    }

    return 0;
}

Demo

答案 8 :(得分:0)

我不建议这样做,但是如果您真的很喜欢它只是一行而只写0次,那么您也可以这样做:

int row, column, index = row = column = 0;

答案 9 :(得分:-11)

如果在未初始化变量的情况下声明变量,则会选择内存中的随机数,并将变量初始化为该值。