C++ Primer学习笔记——第2章 变量和基本数据类型

本文详细介绍了C++中的基本内置类型,包括算术类型和复合类型,如引用和指针,并探讨了类型转换、变量初始化、标识符命名规范及预处理器的使用。

基本内置类型

算术类型分为两类:
整型(包括字符和布尔类型在内)和浮点型

C++:算术类型
类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型64位
float单精度浮点型6位有效数字
double双精度浮点型10位有效数字
long double扩展精度浮点数10位有效数字

类型转换
将对象从一种给定的类型转换为另一种相关类型。
字面值常量

  1. 整型和浮点型字面值
    以0开头的整数代表八进制数,
    以0x或0X开头的代表十六进制数。
    浮点数字面值表现为一个小数或以科学计数法表示的指数。
  2. 字符和字符串字面值
'a'//字符字面值
"Hello World"//字符串字面值
  1. 转义序列
    换行符 \n
    横向制表符 \t
    报警符 \a
    纵向制表符 \v
    退格符 \b
    双引号 "
    反斜线 \
    问号 ?
    单引号 ’
    回车符 \r
    进纸符 \f

变量

变量定义的基本形式是:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。

当对象在创建时获得了一个特定的值,我们说这个对象被初始化了。

列表初始化

int units_sold=0;
int units_sold={0};
int units_sold{0};
int units_sold(0);

在C++11标准中,用花括号初始化变量得到全面应用。
这种初始化的形式被称为列表初始化

默认初始化

如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。
每个类各自决定其初始化对象的方式。而且,是否允许不经初始化就定义对象也由类自己决定。

变量声明和定义的关系

为了允许程序拆分成多个逻辑部分来写,C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。
为了支持分离式编译,C++语言将声明和定义区分开来。
如果想要声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示地初始化变量。

标识符

  • 标识符要能体现实际含义
  • 变量名一般用小写字母,如index,不要使用Index或INDEX
  • 用户自定义的类名一般以大写字母开头,如Sales_item。
  • 如果标识符由多个单词组成,则单词间应有明显的区分,如student_loan或studentLoan不要使用studentloan。

复合类型

C++的复合类型:引用和指针
引用为对象起了另一个名字,引用类型引用另一种类型。
定义引用的时候,程序把引用和它的初始值绑定,而不是把初始值拷贝给引用。

指针是指向另一种类型的复合类型。

  1. 允许对指针赋值和拷贝。
  2. 指针无需在定义时赋初值。

指针的值应属以下4种状态之一:

  1. 指向一个对象
  2. 指向紧邻对象的下一个位置。
  3. 空指针,意味着指针没有指向任何对象。
  4. 无效指针,也就是上述情况之外的任意值。

const限定符

默认状态下,const对象仅在文件内有效
为了解决多文件共享问题,办法是,对于const变量,不管是声明还是定义都添加extern关键字,这样只需要定义一次就可以了。

C++11新标准规定 ,允许将变量声明成constexpr类型以便由编译器来验证变量值是否是一个常量表达式。

类型别名

传统的方法是使用关键字typedef
新标准规定了一种新方法别名声明

using SI = Sales_item;//SI是Sales_item的同义词

auto类型说明符

C++11标准引入了auto类型说明符,用它就能让编译器替我们分析表达式所属的类型。

decltype类型指示符

它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

自定义数据结构

Sales_item的初步定义如下

struct Sale_data{
	std::string bookNo;
	unsigned units_sold=0;
	double revenue=0.0;
};

补充一点:C语言的关键字struct表示结构体,只能有数据成员。
而C++的关键字struct表示类可以有成员函数,它与class的区别在于class的默认访问级别是privatestruct的默认访问级别是public

预处理器概述

确保头文件多次包含仍能安全工作的常用技术是预处理器,它由C++语言从C语言继承而来。

C++程序还会用到的一项预处理功能是头文件保护符,头文件保护符依赖于预处理变量。预处理变量有两种状态:已定义和未定义。
#define指令把一个名字设定为预处理变量,
#ifdef当且仅当变量已定义时为真,
#ifndef当且仅当变量未定义时为真。
#endif执行到endif为止。

预处理器变量无视C++语言中关于作用域的规则。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alfred young

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

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

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

打赏作者

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

抵扣说明:

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

余额充值