概述
基本数据类型
C++中基本数据类型分类:
算数类型分为整型和浮点型,在不同的机器上算数类型的尺寸有所差别。数据类型int、short、long都是带符号类型,添加unsigned就是无符号类型。而字符型分为char、signed char和unsigned char。char可表现为带符号和无符号两种形式,具体表现为哪种形式由编译器决定(数据类型是在编译阶段被检查的)。
如果表达式里既有带符号数也有无符号数,带符号数会被转换为无符号数再计算,当带符号数取值为负数时会出现异常结果。 例如:
unsigned u = 10;
int i = -42;
std::count << i + u << std::endl;//如果int 占4字节,输出4294967264
变量的声明和定义
声明确定了变量的名字和类型,而定义则创建了与变量名相关的实体(申请了内存空间)。变量只能被定义一次,但是可以被多次声明。一个文件中需要使用另一个文件中定义的代码,则必须在该文件中对变量进行声明。
如果想要声明一个变量而非定义它,就在变量 前面使用extern关键字,而且不要显示初始化。例如:
extern int i;//声明而非定义
int j;//声明并定义
extern int n = 3;//非声明而是定义
(在给变量赋初值后,关键字extern就失效了,相当于定义。)
复合类型
复合类型是指基于其他类型定义的类型。引用(左值引用)和指针就是复合类型。
引用
引用就是给被引用对象另起一个名字,所以引用并非对象。在定义引用时就必须初始化它,将其与被引用的对象拥有同样的值(并非拷贝)。在引用定义后,不可以重新引用其他对象。
int ival = 1024;
int &refval = ival;//refval是ival的引用
对引用进行操作就是对被引用的对象做操作。
int &refval2 = refval;//这是正确的,相当于引用的对象就是ival
int i = refval;// i 的初始化值为refval, 也就是ival的值
被引用的只能是一个对象,而不能是字面值或者某个表达式的计算结果。因为引用本身不是对象,所以不能定义引用的引用。
指针
与引用不同,指针本身也是一个对象。(关于指针的详细说明,可以移至主页查看关于指针写的笔记,这里就不赘述了。)
参考连接:https://blog.csdn.net/weixin_45258382/article/details/127985124
处理类型
类型别名
类型别名就是给某种类型另起一个名字。
方法一:使用关键字 typedef
typedef double wage; //wage 是 double 的别名
typedef wage base, *p; //base 是 double 的别名,p 是 double * 的别名
方法二:使用别名声明 (使用关键字 using)
using SI = Sales_item; //SI 是 Sales_item 的别名
auto类型说明符
auto 用于在不清楚表达式的类型时,让编译器根据表达式的结果分析出其所属类型。所以,用 auto 定义变量时必须同时初始化。
//编译器根据 val1 和 val2 相加的结果推断出 item 的类型
//item 的值为 val1 和 val2 相加的结果
auto item = val1 + val2;
例如,val1 和 val2 是 int 型,则 item 也是 int 型。利用 auto 可以在一个语句中声明多个变量,但是语句中的变量的初始基本数据类型必须相同。(一条声明语句中只能有一个基本数据类型)
auto i = 0; *p = &i; //正确,i 是整数, p 是整型指针(都是整型)
auto sz = 0, pi = 3.1; //错误,sz 是整型,pi是浮点型
decltype类型指示符
用表达式的类型推断要定义的变量的类型,但是不使用表达式的值初始化变量(这点与auto 不同)。例如:
decltype ( f() ) sum = x; // 函数 f 的返回类型作为 sum 的类型
最后
以上就是健康故事为你收集整理的【C++】变量和变量类型(引用、指针、typedef、auto、decltype)的全部内容,希望文章能够帮你解决【C++】变量和变量类型(引用、指针、typedef、auto、decltype)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复