C++初始化相关问题

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}
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容