2.2变量(1)初始化,声明和定义,extern,静态类型,作用域

变量的初始化和赋值的区别

    变量的初始化不是赋值,初始化的含义是创建变量时赋予一个初始值,赋值的含义是擦除当前的值,用新的值来替代。

初始化方式,列表初始化

    int units_sold = 0;

    int units_sold(0);

    int units_sold = {0};

    int units_sold{0};

    用花括号来初始化的形式是列表初始化。当用于内置类型的初始化时,如果使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。

    long double ld = 3.1415926536;

    int a{ld}, b = {ld};   // 错误!!!

    int c(ld), d = ld;      //正确

变量声明和定义的关系

C++支持分离式编译,为了支持分离式编译,C++将声明和定义区分开。声明使名字为程序所知,定义负责创建与名字相关的实体。定义会申请存储空间,可能为变量赋一个初始值。变量只能被定义一次但是可以被声明多次。如果只想声明一个变量而非定义它,就在变量名字前加关键字extern,并且不要显式的初始化。若extern double pi = 3.14,这就变成定义了。在函数体内部如果试图初始化一个由extern关键字标记的变量,将引发错误。

静态类型

C++是一种静态类型语言,其含义是在编译阶段检查类型。称为“类型检查”。在这个阶段编译器检查数据类型是否支持要执行的运算,如果试图执行类型不支持的运算,编译器报错,不生成可执行文件。

标识符

字母、数字、下划线组成。其中必须以字母或者下划线开头。

不能连续出现两个下划线。

不能下划线紧连大写字母开头。

函数体外的标识符不能以下划线开头。

名字的作用域

全局作用域:定义于所有花括号之外

块作用域:{}以内

嵌套的作用域:被包含的作用域称为内层作用域,包含别的作用域的作用域是外层作用域。允许在内层作用域中定义与外层作用域一样名字,这时候调用的话是内层作用于的值。如果使用作用域操作符来覆盖默认的作用域规则,那么可以访问到全局的变量。

#include <iostream>
int reused = 42;
int main()
{
    cout << reused << endl;  //输出42
    int reused = 0;
    cout << reused << endl;  //输出0
    cout << ::reused << endl; //输出42。全局作用域没有名字。
}
::是作用域操作符,左边是作用域名字,右边是该作用域下的变量。由于全局作用域没有名字,所以当作用域操作符左边没有名字时就向全局作用域发出请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值