C++有一个特性,就是C++的内置类型无法在局部区域内默认初始化
int m;
int main() {
int n;
cout << m; // 0
cout << n // 编译器报错
}
那么为什么不能像Go语言一样初始化呢?
我们来看一下C++的变量区,一共有四个:
- 栈区,由编译器分配和释放,主要存放局部变量和函数参数
- 堆区,由程序员分配和释放,动态分配的内存就在这个区域
- 静态区,用于存放静态变量和全局变量
- 常量区,用于存放常量,即const关键字定义
好吧其实我还是不清楚为什么不能初始化存放在栈区的局部变量,据说是性能问题,反正就是不能
我们再来看一下初始化数组的几种方法
int main() {
int a[10] = {1};
// 对不起,C++规定数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值
// 所以a数组会变为[1,0,0,0...]
char b[10];
memset(b, 'b', sizeof(b));
// memset函数按照字节填充,所以一般只用来初始化char数组
// memset定义在<cstring>里
s
int c[10];
vector<int> v{0,1,2,3,4,5,6,7,8,9};
fill(c, c+10, 1);
fill(v.begin(), v.end(), 100);
// fill赋值指定区间内的元素
// fill定义在<algorithm>里
// C++11可以省略赋值号
bool flag[10]{};
// 相当于flag[10]{false}
}
网友评论