我总是认为,如果我声明这三个变量,它们都将具有值0
int column, row, index = 0;
但我发现只有指数等于零&其他人像844553& 2423445。
如果不在新行上声明每个变量,如何将所有这些变量初始化为零?
答案 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}
数组。 struct
和memset
或者有一个可以初始化的构造函数
他们归零。答案 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;
}
答案 7 :(得分:1)
就像其他人提到的那样,从C ++ 17开始,您可以使用structured bindings进行多个变量分配。
将此与std::array
和template 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;
}
答案 8 :(得分:0)
我不建议这样做,但是如果您真的很喜欢它只是一行而只写0次,那么您也可以这样做:
int row, column, index = row = column = 0;
答案 9 :(得分:-11)
如果在未初始化变量的情况下声明变量,则会选择内存中的随机数,并将变量初始化为该值。