1、&& 例如 a&&b
先判定a是否为真,如果a为真,则判定b;如果a为假,则直接返回0
2、*(ptr++) 与 *ptr++ 相同,都是先取指针,再相加。++的优先级比*的优先级要高,()的优先级最高,但此处反常。
3、 地址符强制类型转换
<span style="white-space:pre"> </span>float m = 1.5f;
cout << "addr:"<< &m <<endl;
cout << "float Addr:"<< (float &)m <<endl;
cout << "int Addr:" << (int &)m << endl;
输出为
4、不同类型之间运算原则:
(1)类型总是被提升为较宽的类型
(2)所有小于整形的有序类型算术表达式在计算之前会被转换成整形。
5、运算符优先级
(1) 括号>单目>大于双目>大于三目
(2)算术运算>逻辑运算
(3)移位 > 算术比较 > 逻辑比较 > 逻辑位运算 > 与或非
6、判定X是否2的N次方 !(X&(X-1))
7、不用中间变量交换a,b
a = a^b;
b = a^b;
a = a^b;
8、不用比较语句求a,b中较大的数
max = (a+b +abs(a-b))/2;
9、求a,b两个数和的一半
half = (a+b)/2
half = (a&b) + ((a^b)>>1)
10、数组的偏移 int a[10] = {1,2,3,4,5,6,7,8,9,10};
&a+1 这里偏移了一个数组长度的大小 相当于 a的地址 + sizeof(a)*4
&(a+1) 表示向后偏移一个int 大小
11、const修饰的情况:
int b = 500;
const int* a = &b;
int const *a = &b;
int* const a = &b;
const int* const a = &b;
const 与 * 之间的修饰关系,右侧的修饰左侧的。
1,2种情况,* 位于const 右侧,这是指针指向常量,指针可变,指针所指的值是不可变的。
3 const位于 * 的右侧,是const 修饰*。 指针为常量指针,生成时必须初始化所指对象。
4 是常量指针指向一个常量,生成时候也必须初始化所值对象。
12、static 与const 函数
static函数的特性: 1、不能申明为const函数;2、static函数中没有this指针;3、不能为虚函数;4、只能访问staitc成员变量,不能访问非static的成员变量
const函数的特性: 1、const函数中的this指针是常量指针,不能修改;2、const函数只能调用const函数以及static函数,非const函数可以调用成员函数以及const函数;3、const函数不能修改对象的成员变量,无论是否为const成员变量,但可以修改static成员变量;4、加上mutable的数据成员,在任何时候都可以被修改,可以在const函数中修改成员。
13、C++中 ,构造函数的列表初始化的顺序与成员的申明顺序相同,与列表初始化的顺序不一致。
14、常量数据类型不能在类中初始化,因此下面的申明有误。常量数据类型应该在构造函数列表中初始化,或者改为静态常量数据类型。
class A{
const int size = 0;
}