- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++朝花夕拾(拾遗)
C++拾遗
Posted on 2012 年 2 月 5 日 by gemfield 82 views 本文章记录gemfield在使用c++的过程的学习总结。内容无关于刁钻的语法,都是一些平常要用到的容易疏漏的地方。gemfield将不定期更新。
1、类的静态函数不能访问非静态数据;
原因:因为静态成员函数不传递this指针, 不和具体实例关联, 所以不能访问非静态member, 多用于callback。
2、类的静态函数不能声明为const、volatile、virtual;
static没有this指针,而这些的实现要求有this指针。
3、类的const成员函数不能改变对象的普通数据成员,但可以改变static和mutable的数据成员。
4、const对象只能调用const成员函数。
5、const可以用作函数重载的依据之一,和参数类型、返回值类型一样。
6、类的成员函数在调用会插入一个ClassName *Const this指针作为参数;而类的const成员函数在调用的时候会插入const ClassName *Const this指针作为参数。
7、没有指向引用的指针,因为引用并没有开放给外部的地址空间(不像普通的变量)。切记,把引用看作是变量的别名。
8、const引用是指不能通过引用改变变量的值,而非变量的值不能被修改;const 引用可以初始化为不同类型的对象或者初始化为右值(非const引用不可以):
int i=5;
const int j=i;
i=4;//合法
j=4;//非法!!
———————–
int x=3;
const int r=x; //正确
int const r=x; //未定义,可能被编译器忽略,因为引用本来就是const(初始化后不能重新绑定)
——————–
const int ival = 1024;//ival为const
int ref2 = ival;//错误!把一个const int 引用为非const类型
—————–
int a =719;//错误
const int a = 719;//正确,const引用可以初始化为右值
9、常量指针与指针常量:
char const *p //指向const字符的指针,这个const字符的值不能改变
const char *p //同上,也是常量指针
char * const p //指针本身是const ,不能改变指针的指向,但可以改变字符的内容,是指针常量
10、下列四种情况必须使用类的初始化列表:
a、初始化引用(reference)成员;
b、初始化 const 成员;
c、调用基类的构造函数,并且该基类的构造函数有参数时;
d、调用一个类成员的构造函数,并且它有参数时。
同时暗示着,如果有上面的四种情况,那么必须有构造函数来初始化它们。
11、iostream,输入输出流,流(stream)这个单词的意思是:试图说明字符是随着时间顺序生成或消耗的。
12、与其他变量不同,除非特别说明(extern),在全局作用域声明的 const 变量是具有文件作用域的局部变量。不能被其他文件访问。通过指定 const 为 extern(也即 extern const int a = 4;)可以跨文件作用域。
13、枚举成员是常量表达式,并且枚举成员值可以是不唯一的:
enum CivilNet
{
gemfield = 2, //2
leaflower,//3
syszux = 3, //3
civilnet_cn//4
};
14、const char name[8] = “Gemfield”; // error: Gemfield is 9 elements
15、一个数组不能用另外一个数组初始化,也不能将一个数组赋值给另一个数组。
16、指针和 typedef
typedef string *pstring;
const pstring cstr;//string *const cstr而非const string *cstr
17、可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化:
int *gemfield = new int[10] (); //初始化为0
这种方法在const 对象的动态数组中就有用了:
const int *gemfield= new const int[100]();//必须初始化
不过这样的数组用处不大。
18、数组指针:
int *ip[4]; // 数组里面包含4个指针,指向int
int (*ip)[4]; // 指向一个包含有4个int的数组
注意[]的优先级要高。
19、后自增、自减运算
文档评论(0)