C++ Primer学习笔记:变量的定义和声明问题

1 变量

变量提供一个具体的名字,一块可操控的内存空间,可以认为是内存空间的别名。
C++每个变量都有数据类型,数据类型决定着变量所占有的内存空间的大小、布局方式、该空间能存储值的范围,以及变量能参与的运算

2 对象

对象是指一块能存储数据并具有某种类型的内存空间

3 初始值

当对象在创建的时候获得了一个特定的值,我们说这个对象被初始化了。
用于初始化对象的变量可以使任意形式的表达式
在一次定义多个变量的时候,对象的名字随即可用
因此,在同一条语句中,可以用先定义的变量值去初始化后定义的其他变量

4 初始化和赋值的区别

首先注意,初始化不是赋值
初始化的含义是,创建一个变量的时候赋予一个初始值。
赋值的含义是,把对象当前的值擦除,以一个新值代替。

5 列表初始化

C++ 11 新特性,可以用列表初始化变量

int a = 12;
int a = {12};
int a{12};
int a(12);

以上四种方法都可以达到同样的目的
现在无论是初始化对象还是为对象赋予新值,都可以用一组花括号括起来的初始值了。


注意:

  • 当用于内置类型的变量的时候,列表初始化特点:
    • 如果使用列表初始化且初始值有信息丢失的风险,则编译器报错。

long double pi = 3.1415926535;
int a{pi}, b = {pi}; //报错,转换会损失精度,即信息丢失,编译器会报错
int c(pi), d = pi; //正确,转换会执行,不过会损失精度,丢失小数部分值

6 默认初始化

如果定义变量没有指定初始值,则变量会被默认初始化,此时默认值由变量类型和变量定义位置决定。

如果内置类型变量未被初始化,则它的值有定义位置决定。
定义与任何函数体之外的变量被初始化为0
一种例外情况是:定义在函数体内部的内置类型变量则不会被初始化。

类的对象如果没有显示初始化,则其值有类决定。

7 变量声明和定义的关系

声明:使得名字被程序所知道。
一个文件如果要使用别处定义的名字,则必须包含对那个名字的声明。
定义:负责创建于名字相关联的实体。

变量声明:规定了变量的类型和名字
变量定义:在声明的基础上还申请存储空间,或许为变量赋予初始值。

如果想声明一个变量而非定义它,则需要extern关键字标记,而且不要显示的初始化变量

extern int i; //声明i,而非定义i
int j; //声明并定义j

任何包含显示初始化的声明就是定义
可以给extern关键字标记的变量赋予一个初始值,不过也抵消了extern关键字的作用

extern int pi = 3.1415926; //定义

注意
在函数体内部,如果试图初始化一个由extern关键字标记的变量,则会报错。
变量可以定义且只能定义一次,不过可以多次声明
如果在多个文件中使用同一个变量,必须将定义和声明分离,
此时,变量的定义必须且只能出现在一个文件中,
其它文件用到该变量的话,必须在文件中声明,且不能重复定义。

8 关键概念:静态类型

C++是一种静态类型语言,就是在编译阶段检查类型,其中检查类型的过程称为类型检查。

首先要知道对象的类型决定了对象可以参加的运算,编译器负责检查数据类型是否支持要执行的运算,
如果试图执行不支持的运算,编译器报错且不会生成可执行文件。

9 标识符

用户自定义的标识符不能连续使用两个下划线
不能以下划线近邻大写字母开头
定义在函数体外的标识符不能以下划线开头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xMathematics

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值