c++primer总结/第二章 变量和基础类型

1.unsigned int + int 结果为unsigned

//转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
unsigned int u = 10;
int i = -42;
cout << i + u << endl;	//4294967264(32的补码转化为原码.1....1110,0000)

2.unsigned int用循环需要注意

//死循环,等于0再执行一次,变成-1,补码为最大值
for(unsigned int u = 10;u >= 0;--u)
    cout << u << endl;

3.字面值|wchar_t 宽字符

char 	8;
wchar_t 1632;
//字面值
L'a';	//wchar_t类型
//整数数字
u|U	unsigned;
l|L	long;
ll|LL long long;
//小数(加整数后报错)
f|F float;
l|L long double(小数);

4.初始化 != 赋值

初始化时创建变量时赋予一个初始值,赋值是把当前的对象擦除,用一个新值代替;

5.初始化列表(更加安全)

double ld = 3.1415926536;
int a{ ld };	//报错,可能会丢失信息 从“double”转换到“int”需要收缩转换
int b( ld );	//正确,丢失信息
int c = ld;		//正确,丢失信息

//初始化,如果没有就会赋默认值
//定义在函数之外,默认值为0.
//函数体内部变量不会赋默认值,如果拷贝或访问就报错.
//默认值可以自己指定,如string,在函数内外无初始化默认值均为空串

//非法赋值
cin >> int a;	//非法,>>运算符后不能定义;
int a=b=1;		//非法,同一语句的初始化应该分别进行;

6.引用

//为变量值起别名,且创建时必须初始化
//引用赋值必须是对象(不能是常数)
//引用与变量的类型必须一致 (int a = 3;double &b = a;x)

7.指针

int *p1,p2; //p1是int型指针,p2是int型变量
//指向指针的引用,没有指向引用的指针
int a = 1;
int *p = &a;	
int *&r = p;	//r是指针p的一个引用
				//从右往左看,是引用之后才是指针.所以是一个指向指针的引用

8.const

//默认作用域是同一个文件下
//如果要多文件就需要加 extern
double dval = 3.14;
const int &ri = dval;(可行)
/*过程,其实指向的是临时变量
	const int temp = dval;
	const int &ri = temp;
*/

//从右往左看
int a = 10;
const int *ptr = &a;	//其实是指向的地址无法改变,值可以通过a改变
cout << *ptr; //10
a = 12;
cout << *ptr; //12
*ptr = 13;	  //错误

//指向常量的指针可以不初始化
const int *p; //可以

9.constexpr 常量表达式

//一定是const修饰,且具体值不用运行就得到的.
//直接等于常量或者常量相运算,getSize()这种不行,除非getSize()声明为const
//*1、尽管指针和引用都能被定义成constexpr,但它们的初始值却受到严格限制。一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。
//2、函数体内定义的变量一般来说并非存在固定地址中(除了static等修饰,且const也不行,static之前不能加限定词volatile,否则出错),相反,定义于所有函数体之外的对象其地址固定不变,能用来初始化constexpr指针,同时能用constexpr引用绑定到这样的变量上。
//3、对于指针而言,constexpr仅对指针有效,与指针所指的对象无关。
const int *p = nullptr;            //正确,p是一个指向整型常量的指针
constexpr int *q = nullptr;        //正确,但q是一个指向整数的常量指针

2.
constexpr int i = 42;//(必须在函数外或者加static才能确定地址)
constexpr const int *p = &i;

10.类型别名(typedef)

//typedef 类型名 自定义名称;	
typedef pair<int, int> pii;
//using 自定义名称 = 类型名;
using pll = pair<long, long>;

11.类型指示符

//decltype(变量) 变量名 = 值; 
int i = 42;
decltype(i) j = 41; //int j = 42;
decltype((i)) k = &a; //int &k = a;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

公仔面i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值