c++primer笔记二、变量和基本类型

1、数据类型

int、short、long和long long都是带符号的
unsigned int可以得到无符号类型,缩写unsigned

字符串有char、signed char、unsighed char

类型转换

1、转换成布尔值0为false ,其他为true  
2、布尔值转成其他时false变成0,true变成1
3、浮点数强转会近似,只保留之前部分,不四舍五入  
4、整数变浮点,小数部分都为0
5、超过无符号表示范围,则实际数为取模的余数  
6、超过带符号非为,报错

字面值常量

0x表示16进制,0开头表示8进制,10进制时E或e表示科学计数法的指数部分

字符串的结尾有一个空字符'',因此实际长度要多1

转义序列


换行
	横向制表
v纵向制表
"双引号

回车
115 表示字符对应的数值115

注意八进制数字只能跟3个,1234表示一个字符和4
x要用到后面所有字符


变量声明和定义

声明使名字为程序所知,规定了类型和名字 
定义负责创建和名字关联的实体,定义还申请存储空间,也可能复制

想声明不定义用extern,并且不要显式初始化  
extern int i;//声明但非定义  
int j;//声明并定义j
extern double pi =3.141;//定义

变量只能被定义一次,但是可以多次声明。

如果在多个文件中使用同一个变量,就必须分类,定义只能出现在一个文件中,不能重复定义。  

标识符

变量名一般用小写字母  
自定义的类名一般都大写开头
如果有多个单词,第一个首字母小写其他首字母大写

复合类型

引用:为对象起了另一个名字
int ival = 1024;
int $refVal = ival;//refVal指向ival
引用和初始值绑定,如果一个修改另一个也会被修改。  
但是两个名字指向同一个对象  
引用的初始值必须时对象,并且两者类型相同
指针  
指针本身是一个对象,允许复制和拷贝,也可以先后指向不同的对象。  
指针无须定义赋初值

获取对象地址
int ival = 42;
int *p = &ival //p存放ival的地址

指针的值应该4种状态之一
1:指向一个对象  
2:指向紧邻对象所占空间的下一个位置  
3:空指针  (nullptr)
4:无效指针 //拷贝或访问无效制作都会错误

空指针int *p1 = nullptr
NULL是预处理变量,值为0,应该避免使用,最好用nullptr  

void* 是特殊指针,可存放任意对象的地址

const限定符

定义常量,必须赋值,如
const int bufSize = 512;
在编译过程钟用到bufSize的地方都替换成512

要在一个文件中定义const,而在其他文件中声明使用,则添加extern
extern const int bufSize;

可以把引用绑定到const,就是对常量的引用,不能修改它绑定的对象
const int ci = 1024;
const int &r1 = ci;
int &r1 = ci; //这个会报错
r1无法修改

指针也可以用常量指针
顶层const表示指针是常量
int *const p1 = &i;
底层const表示指针的对象是常量
const int *p2 = &ci;

constexpr

让编译器来判断是否是常量表达式。声明为constexpr的变量一定是一个常量,并且必须用常量表达式初始化
constexpr int mf = 20; //是常量表达式
constexpr int limit = mf + 1; //是常量表达式
constexpr int sz = size() //只有当size是一个constexpr函数时,才是常量

类型别名

1、typedef double wages
2、using SI = Sales_item

起一个别名使用,可以给指针
typedef char *pstring;
const pstring cstr = 0 ;//cstr时指向char的常量指针

auto类型说明符

让编译器来推算,必须要有一个初始值;
auto会忽略顶层const,保留底层const

如果希望推断出顶层const。需要指出
const auto f = ci;

也可以把引用类型设置为auto
auto &g = ci;

decltype类型指示符

选择并返回操作数的数据类型,不实际计算表达式
若使用的表达式不是变量是引用,则结果必须被初始化
int &r = i;
decltype(i) b = 1; //i是引用必须赋初值
decltype(i + 0) b; //是int类型
表达式如果加上了括号,结果也将会是引用
decltype((i)) d; //错误,d是int&

头文件保护符

#define 指令把一个名字设定为预处理变量
#ifdef当变量已定义时为真
#ifndef变量未定义时为真
执行操作到#endif为止
原文地址:https://www.cnblogs.com/aqq2828/p/13953626.html