栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 标识符

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号