加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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]{};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读