c – 为什么在函数体内定义的内置类型的未初始化对象具有未定义
发布时间:2020-12-16 05:39:16 所属栏目:百科 来源:网络整理
导读:问题:为什么在函数体中定义的内置类型的未初始化对象具有未定义的值,而在任何函数之外定义的内置类型的对象都初始化为0或“?” 举个例子: #include iostreamusing std::cout; using std::endl;int ia[10]; /* ia has global scope */int main() { int ia2
问题:为什么在函数体中定义的内置类型的未初始化对象具有未定义的值,而在任何函数之外定义的内置类型的对象都初始化为0或“?”
举个例子: #include <iostream> using std::cout; using std::endl; int ia[10]; /* ia has global scope */ int main() { int ia2[10]; /* ia2 has block scope */ for (const auto& i : ia) cout << i << " "; /* Result: 0 0 0 0 0 0 0 0 0 0 */ cout << endl; for (const auto& i : ia2) cout << i << " "; /* Result: 1972896424 2686716 1972303058 8 1972310414 1972310370 1076588592 0 0 0 */ return 0; } 解决方法
因为C的一般规则之一是你不支付你不使用的费用.
初始化全局对象相对便宜,因为在程序启动时只发生一次.初始化局部变量会增加每个函数调用的开销,这不是每个人都想要的.所以决定将本地化的初始化选择为与C语言相同的方式. BTW如果要在函数中初始化数组,可以写: int ia2[10] = {0}; 或在C 11: int ia2[10]{}; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |