C++  Primer 从入门到放弃 第二章 1-2 变量&基本类型

C++ Primer 从入门到放弃 第二章 1-2 变量&基本类型

第二章变量和基本类型 [内置类型与变量]


基本内置类型:
分为算数类型(arithmetic type) 和空类型(viod)。
算数类型分为两类 整型(integral type,包括字符,布尔类型)和浮点型。

|类型 | 含义 |最小占位|
| -------- | :-----: | :----: |
|bool | 布尔类型|未定义|
|char |字符 | 8位|
|short |短整型 |16位|
|int |长整形 |16位|
|long |长整形 |32位|
|long long |长整形 |64位|
|float |单精度浮点型|6位有效数字|
|double |双精度浮点型|10位有效数字|
|long double|扩展精度|10位有效数字|

扩展: short类型始终保持16位不会因编译环境不同而改变。

类型转换:

程序会完成给对象一个特殊的类型转换为另一种相关类型。


bool b = 0;    // b为true
int i = 3.14   // i为3
signed char c = 256
// implicit conversion from 'int' to'signed char' changes value from 256 to 0
// 无法通过编译 可以看出是编译器做了类型转换



建议:

  • 避免无法预知的和依赖于编译环境的行为。
  • 切勿混用带符号类型与有符号类型


字面常量:
字面值常量(literal)的形式,对应着类型。

'a' // 字符字面量
6   // 整形字面量
024 // 八进制数

变量:
变量定义的基本形式是: 类型说明符(type specifier)+ 变量名组列表。变量组名用","分隔。

int a,b=0;
std:string book("XXXX-XXXX") // std:string为库类型

术语: 何为对象,通俗来说对象就是具有某种数据类型的内存空间。


初始化:
初始化(initialized)不等同于赋值。

int a = 0
int a = {0}; // 列表初始化
int a{0}

在使用列表初始化过程中若出现可能因为类型转换而丢失精度时,编译器会报错。

默认初始化问题,内置类型变量在函数体内部定义时如果没有初始化,它将不会被初始化。如果定义在函数体外部,变量将被初始化并赋予零值。
变量声明与定义的关系:

声明(declaration)与定义(definition)是不同的概念。


extern int i; // 声明并非定义
int i; //声明并定义i
extern int i = 0; 定义


扩展: 声明一个变量只是将变量名标识符的有关信息告诉编译器,使编译器“认识”该标识符,但声明不一定引起内存的分配。而定义变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应的内存单元的命名。


在C++程序中,大多数情况下变量声明也就是变量定义,声明变量的同时也就完成了变量的定义,只有声明外部变量时例外。


禽兽一只:《C++ Primer》从入门到放弃zhuanlan.zhihu.com图标

编辑于 2018-05-21