C++杂记(1)

来源:互联网 发布:流程图在线制作软件 编辑:程序博客网 时间:2024/06/09 08:59

1、x&-2 x与-2的补码做与运算,实现将x转换为偶数
2、int num = num1^num2 按位异或
3、 int carry = (num1&num2)<<1 按位与左移一位 即本条操作实现两个数相加
4、32位机器和64位机器的主要差别在指针的大小上,32位大小为4,64位大小为8
5、= [] () -> 必须作为成员函数重载
6、STL中的一级容器是指容器本身是基本类型,而非组合类型。一级容器有vector deque list。set和multisize中元素的类型是pair(key_type,key_type),map和multimap中的元素类型是pair(key_type,value_type).
7、虚函数不可以内联,虚函数是在运行是确定具体调用的函数,而内联则是在编译阶段进行代码展开
8、智能指针实质是一个栈对象,而非指针类型。C++中的auto_ptr作用是动态分配对象,以及当对象不在需要时自动清理。
9、声明一个指向含有十个元素的数组的指针,其中每个元素时一个函数指针,该函数的返回值是int,参数是int*。则为 :int ((*p)[10])(int) 其中int(p)(int)为函数指针。
10、char c[10];
scanf(“%s”,c);和scanf(“%s”,&c);均正确
11、c++接口是指只包含纯虚函数的抽象类,抽象类只能创建派生类,不能定义抽象类对象。
12、c++中只有构造函数和析构函数或其他成员函数时,所占内存为1.带有虚函数时,内存为4.普通继承都是共用一张虚函数表,指针大小不增加。
13、指针是有减法的,只不过只在数组中应用。
14、在结构体中,(1)变量中成员的偏移量必须是成员大小的整数倍。(2)结构体的最终大小必须是成员大小的整数倍。
例:struct xx{
long long x1;
char x2;
int x3;
char x4[2];
static int x5;
}
sizeof(xx) = 8+1+3+4+(1+3)*2+6 = 24
15、int A[2][3] = {1,2,3,4,5,6} 则(A+1)+1)的值为5.
解析:A = A[0][] (A+1) = A[1][] *(A+1)+1 = A[1][1]
16、一旦某个函数形参被赋予默认值,他后面的所有形参都必须有默认值。
17、引用是除指针外唯一可以产生多态的手段,这意味着,一个基类的引用,可以指向派生类的实例。
18、char *p = “123” 声明了一个字符串指针,指向字符串“123”
此时“123”放在常量区,并没有拷贝到栈中,不能修改。
19、c++double类型在32位和64位机器上都占8个字节。
20、print()函数为类的常成员函数,无返回值,则表示为 void print()const;
const void print(const int num)const 第一个const修饰返回类型。
21、sizeof()计算发生在编译期,是操作符,不是函数调用。
sizeof(double)相当于一个整形表达式,因为返回一个整数。
22、new会分配内存,并调用类的构造函数创建对象,malloc只分配内存,不会调用类的构造函数。
23、math.round(11.5) = 12 math.round(-11.5) = -11
24、char a = ‘\82’ a = ‘2’ 只包含一个字符。