happy_zero @ 2024-06-20 19:40:39
定义结构体,里面的数组/变量会自动赋值为 0 吗?有什么条件吗?
比如下面这段代码:
#include <bits/stdc++.h>
using namespace std;
struct node {
int w, id;
};
void query(int k, int l, int r, int L, int R) {
if (L <= l && r <= R) return;
int m = l + r >> 1; node res; cout << res.w << ' ' << res.id << '\n';
if (L <= m) query(k << 1, l, m, L, R);
if (R > m) query(k << 1 | 1, m + 1, r, L, R);
}
signed main() {
for (int i = 1; i <= 3; i++)
query(1, 1, 3, i, 3);
return 0;
}
这段代码的输出在洛谷 ide c++14 没开 O2 的时候的输出:
0 0
32764 4210080
0 0
每次中间那行的数还不一样。但是开 O2 就全是 0(正确)。但是尝试直接在主函数里定义 3 遍输出 3 遍是没问题的。以前我都直接定义不赋值的,一直都没有问题,求助为什么上面会这样(还是说我其他地方有问题)?
by oyoham @ 2024-06-20 19:43:26
好像不会,我定义矩阵时不清零会错
by Dyd本人 @ 2024-06-20 19:43:58
你可以这样
struct node {
int w = 0, id = 0;
};
可以保证默认为 0 否则,在函数内申请的空间默认值是随机的
by Dyd本人 @ 2024-06-20 19:44:39
@happy_zero
by happy_zero @ 2024-06-20 19:49:04
@Dyd本人 那就是说局部要赋值,全局不用?
by zjzx_wcj @ 2024-06-20 19:51:34
@happy_zero 可以这样:
struct node{
int w,id;
node () {}
};
by happy_zero @ 2024-06-20 19:52:52
@Dyd本人 但那样好像定义大数组时会很慢,而且不能直接用 = {} 了欸
by zjzx_wcj @ 2024-06-20 19:54:44
@happy_zero @happy_zero @happy_zero @happy_zero @happy_zero
by happy_zero @ 2024-06-20 19:55:35
@happy_zero 呸好像不会变慢但后面那个不能用
by happy_zero @ 2024-06-20 19:57:30
@zjzx_wcj 那么写好像没办法赋值,我知道的是这样:
struct node{
int w,id;
node () {w = id = 0;}
};
但同样没办法直接用 ={} 赋值
by happy_zero @ 2024-06-20 20:00:36
翻了翻以前的代码试了一下,但好像确实要这么写。。。