问题:
为什么定义内置类型的未初始化对象inside函数体具有未定义的值,而内置类型的对象已定义outside任何函数的初始化为0
or ''
?
举个例子:
#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 语言中的方式相同。
顺便说一句,如果你想在函数内初始化数组,你可以这样写:
int ia2[10] = {0};
或者在 C++11 中:
int ia2[10]{};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)