左值,用的是对象的身份
(内存中的位置),右值,用的是对象的值
解引用生成
左值,取地址生成一个
右值
bool b = true;
bool c = -b; //c为true,因为
bool值在计算的时候被转换成整型号int,所以b被转换成-1,不为0,所以赋值给c的时候,为True
int b;
while ( b = get_value() != 3 ){
//说明
“=”赋值运算符优先级较低
,会
先进行逻辑运算
cout << "bingo " << b << endl;
}
赋值语句之后,返回的是左值,本身不是逻辑表达式,加了括号也一样
后自增 > 前自增 > 解引用(优先级比较)
sizeof使用时,
引用大小为
引用对象大小,
指针解引用,为
所指对象所占空间大小
sizeof(short) = 2 ; sizeof(int) = sizeof(long) = 4; //
本系统中的情况,具体需要是机器而定
此处需要了解指向数组的指针,b的
类型实质为 int (*) [5]
常量整数值0或
字面值nullptr能转换成
任意类型指针;指向
任意非常量指针能转换成
void *;
任意对象指针能转换成
const void *;
4.11类型转换(const、static、dynamic、reinterpret)
任何具有明确定义的类型转换,只要不包含底层const,都可以使用
static_cast(用于将
大类型转成小类型,表示
用户不在乎记录丢失)
const_cast只能改变运算对象的底层const属性,不能改变类型,常用于
有函数重载的上下文中
const char * cp;
const_cast<string>(cp); //
错误,只能提供const转换,不能提供类型转换
reinterpret_cast为运算对象的位模式提供较低层次的重新解释
int *ip;
char * pc = reinterpret_cast<char *>(ip); // 编译没有问题,但是执行报错
建议,尽量避免使用强转!!!
dynamic_cast和继承和运行时类型识别一起使用
区别“~”与“!”,一个是
位运算求反,一个是
逻辑运算求非!