1、初始化:初始化指创建变量并给它赋值初值,赋值则是擦除对象当前值并用新的值代替。
2、内置类型变量的初始化:在函数外定义的变量都初始化为0,在函数体里定义的内置类型变量不进行自动初始化。
3、建议每个内置类型的对象都要初始化。虽然不是必须的,但是会更加容易和安全。
4、类类型变量的初始化:类通过定义一个或多个构造函数来控制类对象的的初始化。
5、声明和定义:变量的定义用于为变量分配存储空间,还可以为变量指定初始值。声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了他的类型和名字。
6、变量在使用前必须先声明或定义。
7、在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。const对象必须初始化,且其值不能被修改。
8、引用就是对象的另一个名字。在实际程序中主要用作函数的形式参数。作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。
9、const引用是指向const对象的引用。非const引用只能绑定到与该引用相同类型的对象。
10、typedef 名字:typedef 通常被用于以下三种目的
①为了隐藏特定类型的实现,强调使用类型的目的
②简化复杂的类型定义,使其容易理解
③允许一种类型用于多个目的,同时使得每次使用该类型的目的明确
11、class和struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,而class的成员为private。
12、头文件中应该只定义确定必要的东西。
13、两个字符串字面值相加是非法的。
14、cctype定义的函数:
15、vector对象的初始化方式:
①vector
②vector
③vector
④vector
16、vector必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。
17、每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。
18、解引用操作符(*操作符):解引用操作符返回当前指向的元素。
19、标准库bitset类型:初始化bitset方法如下:
①bitset
②bitset
③bitset
④bitset
20、当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。当用string对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右到左:
string val("1100");bitset<32> bitval(val); //第二三位是1,其余位都是0
21、除了程序员自己注意细节,并彻底测试自己的程序之外,没有别的方式可防止数组越界。
22、尽量避免使用指针和数组。vector和迭代器一般取代了数组和指针,string取代了C风格的字符串。
23、由于指针的类型用于确定指针所指对象的类型,因此初始化或赋值时必须保证类型匹配。
24、void* 可以保存任何类型对象的地址。
25、指针赋值和通过指针进行赋值两种操作的区分方法:如果如果对左操作数进行解引用,则修改的是指针所指向的对象的值;如果没有使用解引用操作,则修改的是指针本身的值。
string s1("some value");
string *sp1 = &s1;
string s2("another");
string *sp2 = &s2;
*sp1 = "a new value"; //*sp1 = "a new value"
sp1 = sp2; //*sp1 = "another"
26、两个指针减法操作结果是标准库类型ptrdiff_t的数据。
27、C++允许计算数组或对象的超出末端的地址,但不允许对地址进行解引用操作。而计算数组超出末端位置之后或数组首地址之前的地址都是不合法的。
28、定义const对象必须初始化。
29、C语言风格字符串是以空字符null结束的字符数组。在处理C风格字符串的标准库函数时,牢记字符串必须以结束符null结束。
char cal1[]={'C','+','+'}; //not null
char cal2[]={'C','+','+','\0'}; //null 是C语言风格
char cal3[]="C++"; //null 是C语言风格
const char *cp="C++"; //null 是C语言风格
30、C风格字符串的标准库函数,头文件#include
一般有如下函数:strlen(s)返回字符串的长度,不包括结束符、strcmp(s1,s2) 字符串相等返回0、strcat(s1,s2)将s2连接到s1、
strcpy(s1,s2)将s2复制给s1、strncat(s1,s2,n)将s2的前n个字符连接到s1、strncpy(s1,s2,n)将s2的前n个字符复制到s1
31、混合使用C风格和string风格字符串:
string str = "C++";
const char *str1 = str.c_str();
cout << str1 << endl; //输出 C++
32、数组初始化vector:
const int array_size = 5;
int int_arr[array_size] = {1,2,3,4,5};
vector
33、将第27位置1, bitset_quiz.set(27); int_quiz |= 1UL << 27;
将第27位置0, bitset_quiz.reset(27); int_quiz &= ~(1UL << 27);
查看第27位状态, bool status; status = bitset_quiz[27]; int_quiz&(1UL<<27);
34、在赋值操作上加圆括号是必需的,因为赋值操作符的优先级低于不等操作符。
35、值初始化的()语法必须置于类型名后面,而不是变量后。
int *pi = new int(); //*pi=0
int x(); //没有起到初始化作用,程序报错
36、动态内存的管理容易出错
(1)删除指向动态内存的的指针失败,造成“内存泄漏”。一般很难发现,只有消耗尽内存,内存泄漏才会真正显露出来。
(2)读写已删除的对象。如果删除指针所指向的对象之后,将指针置为0值,则比较容易检测出这类错误。
(3)对一个内容空间使用两次delete表达式。
37、静态全局变量与全局变量的唯一区别就是作用域不同。
全局变量
全局静态变量
静态局部变量
局部变量
Tips: