C++学习简记

1、signed符号位为1表示负数。对unsigned类型变量赋值,若越界则取模,即使为负数。对signed越界赋值未定义。
2、float类型6位小数,double至少10位。long运算代价高于int。double相对float的计算代价可以忽略,甚至比float要快的多。
3、L'a'可用以表示w_chart类型。
4、多行字面值 \必须是该行尾字符,后继行行首的任何空格和制表符都是字符串字面值的一部分。
5、初始化与赋值不同。复制初始化= 直接初始化() 。直接初始化更加灵活高效。
6、声明有初始化式,可以当做是定义。
7、避免魔数 magic number。
8、非const变量默认为extern,使const变量能够在其他文件访问,必须显示指定extern。
9、const引用时指向const对象的引用。非const引用只能绑定到与该引用同类型的对象。const引用可以绑定到不同但相关类型的对象,或绑定到右值。
10、struct class 定以后均有 ; 。定义变量与定义类的数据成员不同,不能吧成员的初始化作为定义的一部分。
11、头文件中一般包括 类的定义 extern变量的声明 函数的声明。头文件不可含有变量或函数的定义,但可以定义类、值在编译时就知道的const对象和inline函数。


1、在头文件中,总是使用完全限定的标准库名字。
2、string::size_type unsigned的某个类型,size()或者下标最后使用该类型。
3、大多数string库类型的赋值操作 = 的实现都会有效率问题,因为做了一些必须的工作。
4、string对象和字符串字面值混合连接时 +操作符左右操作数须有一个为string类型。 string s1 = s0 + "me" 是可以的,但是 string s2 = "you" + "me" 不可以。
5、const_iterator 与 const iterator 是不同的。
6、difference_type 用以表示两个迭代器对象间的距离,是signed类型的值。
7、bitset类型对象的区别在于长度 bitset<32> bitvec 。string 对象与 bitset 对象之间反向转换。to_ulong 将同样的二进制位返回为一个ulong值。


1、new int[10]() 将产生10个连续int空间,并默认构造为0。若 new int[10] 空间中为未定义值。 但类类型会调用默认构造函数 new string[10] 产生10个连续string空间,并构造为空""。
2、delete [] pia 删除pia指向的数组,[] 必需有。
3、可将c风格字符串用于任何可以使用字符串字面值的地方,但c风格字符串不可使用string类型对象。string st2; 则 char *str = st2 是错误的,可用 const char *str = st2.c_str 。c_str 将string转为c风格字符串,但范围的指针是指向const char数组的指针,以避免修改数组,故需添加const。
4、构造vector时,初入同类型某数组的两个指针,可将vector初始化为指针范围间的值。int a[6]; vector<int> ivec(a+1, a+3); 可将ivec初始化为a[1] a[2] a[3]


1、除法/求模%。操作数全正,除法求模结果均为正;操作数全负,除法结果为正,求模结果为负。一正一负,除法结果为负,求模结果未定义,故除法结果具体值不确定。
2、位操作符。若操作数为负,未定义如何让处理,故若用位操作符,尽量采用unsigned整形操作柱。
3、自增自减++--。只有在必要时才使用后置。
4、sizeof操作符。返回值类型为size_t 长度单位为字节。sizeof表达式的结果是编译时常量。sizeof数组的结果除以sizeof元素类型可求出数组元素的个数。
5、复合表达式。除&& || ?: 外,大多数操作符未指定操作数的求职顺序。一个表达式中不要对两个以上字表达式的同一对象进行自增自减操作。
6、new delete。new 类型 、new 类型() ;若为类类型调用默认构造函数,若为内置类型不加()则内容未初始化,加()初始化为0。int *pi = new int(); delete pi; pi = NULL; delete删除了pi指向的对象,应及时将pi置为空指针,以防二次删除。允许delete空指针。
7、const i n* pci = new const int(1024); 动态构建const对象,不可更改但可以删除 delete pci。
8、隐式类型转化。使用数组时,自动转换为指向第一个元素的指针;使用非const对象初始化const对象的引用时,将非const转为const。
9、显式类型转换。dynamic_cast支持运行时识别指针或引用所指向的对象。 stastic_cast编译时隐式转换的可用此做显式转换。 const_scatic转换掉指针或引用的const性质。reinterpret_cast重新解释了给出的对象的比特模型而没有进行二进制转换。


1、复合语句(块)不是以分号结束的。
2、语句作用域。在if while for 条件中定义的,只在循环中起作用。
3、悬垂else。将else匹配给最后出现的尚未匹配的if子语句。
4、switch case语句。标号不可独自存在,需位于语句之前,即使是空语句。
5、break语句用于结束最近的while do while for 或 switch 语句,并将程序的执行权交予紧接在终止语句之后的语句。
6、goto语句。goto语句与带标号的语句必须位于同一个函数内。
7、异常处理。try { ...throw ...} catch(){...}catch(){...}catch(){...}。
8、NDEBUG assert()


1、函数不能返回另一个函数或内置数组类型,但可返回函数指针或只想数组元素的指针的指针。
2、如果使用能够引用形参的唯一目的是避免复制实参,t应将形参定义为const引用。应将不需要修改的引用形参定义为const引用,非const引用不灵活,既不能对const对象初始化,也不能用字面值或产生右值的表达式实参初始化。
3、指向指针的引用。int *&v1。比如可用于交换两个指针,从而使其指向另一个对象。
4、通常将数组形参定义为指针比使用数组语法要好。print(int *) print(int[]),前者明确表示出传递的是指针,而不是数组本身。
5、通过引用传递数组,则数组大小在编译时也可被检查。print(int (&arr)[10])
6、返回引用,这样的函数可用于任何要求使用坐直的地方。char &get_ca;(string&, int ) ;get_val(s, 0) = 'A'。
7、内联函数应放在头文件中,因为内联函数的定义对编译器必须可见,以便展开。
8、局部的声明函数,则该函数将屏蔽而不是重载外层作用域中的同名函数。
9、指向函数的指针。可用于调用所指函数,不需接引操作符直接调用。如 pf('hi') (*pf)('hi')皆可。
10、函数指针可作为形参传入。
11、可返回函数指针。形参定义为函数类型,则对应实参会自动转为对应函数指针,而返回函数类型错误,不会自动转为函数指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值