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

基本内置类型

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

C++:算术类型
类型 含义 最小尺寸
bool 布尔类型 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 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++语言中关于作用域的规则。

你可能感兴趣的:(C++,c++)