c++基础杂记

1.左值与右值

左值:L-value中的L指的是Location,表示可寻址。左值可以表示对象,即具有对应的可以由用户访问的存储单元。左值表示存储在计算机内存的对象,即“可寻址值”。也就是可以用&来取地址的对象是左值。

右值:R-value中的R指的是Read,表示可读。指的是引用了一个存储在某个内存地址里的“数据”。

所以左值又可以归纳为:左值表示程序中必须有一个特定的名字引用到这个值。而右值引用的是地址里的内容,所以相反右值又可以归纳为:右值表示程序中没有一个特定的名字引用到这个值除了用地址

2.NULL和nullptr

c++11之前只有NULL来表示指针为空 也就是‘0’,c++11加了nullptr来表示空指针。(从理解上表述)两者的不同在于NULL的类型是int,nullptr的类型是指针,恰好空指针的值是‘0’和NULL相等,所以两者看上去很像。但是值相同类型不同这是区分二者的关键。例如http://www.cnblogs.com/feng-sc/p/5710724.html 文章1.2节

 

 
class Test { public: void TestWork(int index) { std::cout << "TestWork 1" << std::endl; } void TestWork(int * index) { std::cout << "TestWork 2" << std::endl; } }; int main() { Test test; test.TestWork(NULL); test.TestWork(nullptr); }

 

 

 

 

运行记过结果分别是TestWork 1,TestWork 2。

3.dll和exe中如果存在相同的全局变量也不会冲突,因为dll中的全局变量已经变成了地址,不存在变量名称了,重命名只在编译链接阶段能检测出来。

4std:string 调用find()函数如果查找的是汉字,尤其是比较短的时候很容易出错,因为汉语在ansi的编码中占两个字节,两个汉字的后一个字节的编码和另一个汉字前一个字节的编码可能正好是要查找的那个汉字对应的编码,所以遇到汉字的查找操作最好用std:wstring

5两个string中如果前面的字符完全一样,另一个string后面还有若干个0,此时调试的时候,看不出这两个string的显示有什么不同,但是用compare比较的时候是不相同的,调试的时候容易懵逼。

6c++和c的函数参数都是从右向左入栈,但是对于参数的计算顺序确实未定义,比如   int i=8; int j=8; void rest( i+j,++j);  

这个函数从右向左入栈是没错的 但是入栈之前会计算两个参数的值,这时这两个参数的计算顺序却是未知的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值