C++中声明int对象未初始化导致计算异常的原因咨询
为什么未初始化的局部变量
int c;会导致结果错误? 嘿,这个问题绝对是C++新手最容易踩的坑之一,我来给你讲明白背后的原因~
首先你得记住一个关键规则:在C++中,函数内部的普通局部变量(也就是自动存储期变量)不会被自动初始化为0!当你只写int c;的时候,这个变量的值是未定义的——它会直接占用内存里原来遗留的随机垃圾值,具体是什么完全不确定。
而你一开始写的int c=0;是显式给c赋了初始值0,所以后续累加两个vector的元素时,是从0开始加,结果自然正确。改成int c;后,c的初始值是随机垃圾数,再加上两个vector的元素和,最终返回的结果肯定是错的。
这里补充个小知识点:和局部变量不同,全局变量或者静态局部变量会被默认初始化为0,但局部变量不行,C++标准就是这么规定的——这么设计是为了性能,避免不必要的初始化开销。
怎么避免这种问题?
- 最稳妥的方式就是始终显式初始化局部变量,比如你原来的
int c=0;就很好; - 或者用C++11及以后支持的统一初始化语法
int c{};,这样也会把c初始化为0,写法更简洁; - 如果你想更优雅地实现这个函数,其实还可以用标准库的
std::accumulate来简化代码,比如:
#include <vector> #include <numeric> // 需要包含这个头文件 using namespace std; int arrayPlusArray(vector<int> a, vector<int> b){ return accumulate(a.begin(), a.end(), 0) + accumulate(b.begin(), b.end(), 0); }
这样不用自己写循环,代码更简洁可读性也更强~
内容的提问来源于stack exchange,提问作者Shalva123
相关产品推荐
相关产品推荐

