c – 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?

前端之家收集整理的这篇文章主要介绍了c – 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题:为什么在函数体中定义的内置类型的未初始化对象具有未定义的值,而在任何函数之外定义的内置类型的对象都初始化为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]{};

猜你在找的C&C++相关文章