我总是认为,如果我声明这三个变量,它们都将具有值0
int column, row, index = 0;
Run Code Online (Sandbox Code Playgroud)
但我发现只有索引等于零而其他的都是垃圾,如844553和2423445.
如何在不声明新行的每个变量的情况下将所有这些变量初始化为零?
Mat*_*att 145
当你声明:
int column, row, index = 0;
Run Code Online (Sandbox Code Playgroud)
只有索引设置为零.
但是,您可以执行以下操作:
int column, row, index;
column = index = row = 0;
Run Code Online (Sandbox Code Playgroud)
但我个人更喜欢以下指出的内容.
在我看来,这是一种更易读的形式.
int column = 0, row = 0, index = 0;
Run Code Online (Sandbox Code Playgroud)
要么
int column = 0;
int row = 0;
int index = 0;
Run Code Online (Sandbox Code Playgroud)
Mat*_*haq 43
正如@Josh所说,正确的答案是:
int column = 0,
row = 0,
index = 0;
Run Code Online (Sandbox Code Playgroud)
你需要用指针注意同样的事情.这个:
int* a, b, c;
Run Code Online (Sandbox Code Playgroud)
相当于:
int *a;
int b;
int c;
Run Code Online (Sandbox Code Playgroud)
Mar*_*k B 23
如果你为每行声明一个变量/对象,它不仅可以解决这个问题,而且可以使代码更清晰,并在声明指针时防止出现愚蠢的错误.
要直接回答您的问题,您必须明确地将每个变量初始化为0.int a = 0, b = 0, c = 0;.
Mic*_*fik 15
int column(0), row(0), index(0);
Run Code Online (Sandbox Code Playgroud)
请注意,此表单也适用于自定义类型,尤其是当它们的构造函数使用多个参数时.
从 C++17 开始,您可以使用结构化绑定:
#include <iostream>
#include <tuple>
int main ()
{
auto [hello, world] = std::make_tuple("Hello ", "world!");
std::cout << hello << world << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不会推荐这个,但如果你真的很喜欢一行并且只写 0 一次,你也可以这样做:
int row, column, index = row = column = 0;
Run Code Online (Sandbox Code Playgroud)
可能的方法:
memset或者{0}数组。struct, 和/memset或有一个构造函数将它们初始化为零。正如其他人提到的,从 C++17 开始,您可以使用结构化绑定进行多个变量赋值。
将此与模板参数推导相结合,std::array我们可以编写一个函数,将值分配给任意数量的变量,而无需重复类型或值。
#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
285457 次 |
| 最近记录: |