• C++ primer 查漏补缺三 :初始化


    初始化

    初始化: 创建变量时赋予其一个初值
    赋值:把对象的当前值擦除,用一个新值代替

    初始化的几种形式

    int i=0;
    int i={0};
    int i{0}
    int i(0)
    
    • 1
    • 2
    • 3
    • 4

    其中花括号的形式叫做 “ 列表初始化

    当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:

    long double ld = 3.1415698
    int a{ld} , b={ld}; //错误
    int i = ld; t(ld);//正确 丢失部分值
    
    • 1
    • 2
    • 3

    使用long double的值初始化int变量时可能丢失数据,所以编译器拒绝了a和b的初始化请求。其中,至少ld的小数部分会丢失掉,而且int也可能存不下ld的整数部分。

    默认初始化

    如果定义变量时没有指定初值,则变量被默认初始化(default initialized),此时变量被赋予了“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。

    如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0。

    一种例外情况是,定义在函数体内部的内置类型变量将不被初始化(uninitialized)。一个未被初始化的内置类型变量的值是未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。

    每个类各自决定其初始化对象的方式。而且,是否允许不经初始化就定义对象也由类自己决定。如果类允许这种行为,它将决定对象的初始值到底是什么。

    声明和定义

    为了允许把程序拆分成多个逻辑部分来编写,C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。
    如果将程序分为多个文件,则需要有在文件间共享代码的方法。例如,一个文件的代码可能需要使用另一个文件中定义的变量。一个实际的例子是std::cout和std::cin,它们定义于标准库,却能被我们写的程序使用。

    为了支持分离式编译,C++语言将声明和定义区分开来。

    声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。
    定义(definition)负责创建与名字关联的实体。

    变量声明规定了变量的类型和名字,在这一点上定义与之相同。
    定义还申请存储空间,也可能会为变量赋一个初始值。

    变量能且只能被定义一次,但可以声明很多次
    如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量:

    extern int i; //声明i而非定义i
    int j; // 声明且定义i
    
    • 1
    • 2
  • 相关阅读:
    VMware——WindowServer2012R2安装jdk1.8及环境变量配置
    3.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-游戏启动流程的分析
    BP神经网络需要训练的参数,bp神经网络建模步骤
    给电脑重装系统后Win11如何重置记事本?
    LS-DYNA系列_IDEAL_GAS状态方程
    基于SSM+Vue的校园教务系统的设计与实现
    Oracle函数之连续求和分析函数
    react的状态管理简单钩子方法
    mOFDM系统下对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析
    Linux 之 JavaEE 定制篇-搭建 JavaEE 环境
  • 原文地址:https://blog.csdn.net/fuyouzhiyi/article/details/125402568