C++学习笔记之编程应当注意的问题
2017-07-19 10:21
344 查看
前言
这里提及的C++问题都是C++98的标准应该注意的问题。问题描述以及避免办法
1、引用引用只能引用已经存在的内容,例如变量,对象等等,但是对于函数的返回值,在函数返回时,这个值被存放在一个临时分配的区域里面,这个值很快就会被释放掉。所以不能直接引用函数的返回值也是这个原因。
扩展:在C++11的标准中,有了移动构造和右值引用,所以在C++11中可以看到函数的返回值被引用的情况,但是这个值也是被固定下来了的,采用这两种办法也是为了让函数返回的临时对象不立即被释放掉,从而可以被程序引用。
2、++i 与 i++ 引发的效率的问题
在学校里面接触到的多半是这两个操作产生的影响,但是很少了解这两个操作是有效率差别的。
++i。除了是先加1,后做其他的操作外,它加一的过程不需要中间的变量,直接在原变量的基础上进行的加1操作。形如i + 1,然后直接将结果返回。
i++。除了是先进行其他的操作,再加一外,它加一的操作是需要中间变量来支持的,形如:i = i + 1;这过程还是产生了一个中间的变量。
之前也是没有接触过,直到今天被教育了一遍。。。。T_T
3、++i与i++的效果的问题
上次说完了++i与i++的效率的问题,这次再说说应该注意的问题吧!
//计算下这里的代码输出是什么? #include <iostream> using namespace std; void main() { int i = 1; printf_s("%d, %d, %d, %d\n", i, i++, i++, ++i); }
为什么会这样呢?原因在于前置++,那么会在所有实参运算结束后,取最终值作为实参;如果是后置++,那么会直接保留当前值,然后+1。而且,printf的执行顺序是从右到左进行执行的。在程序里面还是需要特别注意这样的问题。
3、map的erase并不是真正的删除了元素的空间
由于我之前接触的STL的知识很少,所以我一直以为erase删除了元素的同时,也删除了整个分配的空间,但是实际上map只是清空了整个元素的值,并没有删除空间,但是好的就是这个空间可以再次被利用。
来看代码吧!
#include <iostream> #include <utility> #include <map> #include <string> using namespace std; void main() { map<string, string> strMap; strMap.insert(make_pair("name", "Jerry")); strMap.insert(make_pair("sex", "man")); strMap.insert(make_pair("age", "23")); cout << "The bit size of Map is : " << sizeof(strMap) << endl; cout << "The size of Map is : " << strMap.size() << endl; strMap.erase(strMap.find("sex")); cout << "The bit size of Map is : " << sizeof(strMap) << endl; cout << "The size of Map is : " << strMap.size() << endl; strMap.insert(make_pair("sex1", "man")); cout << "The bit size of Map is : " << sizeof(strMap) << endl; cout << "The size of Map is : " << strMap.size() << endl; }
…….未完,待续
相关文章推荐
- 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good
- 【菜鸟C++学习笔记】24. 常见的引用注意问题
- 你应当如何学习C++(以及编程)
- 你应当如何学习C++(以及编程)(rev#1)
- C++学习笔记(8)——继承中的二义性问题和虚基类
- 高质量C++/C编程指南学习笔记(上)
- [转]你应当如何学习C++(以及编程)
- 你应当如何学习C++(以及编程)(rev#1)
- 你应当如何学习C++(以及编程)
- 学习C++值得注意的问题
- 你应当如何学习C++(以及编程)(rev#1)
- 你应当如何学习C++(以及编程)
- C++程序员在学习C#时需要注意的一些问题(一)
- C++ Primer学习笔记:C++与C不同的编程习惯
- 高质量C++/C编程指南学习笔记(上)
- 你应当如何学习C++(以及编程)(rev#1)
- c++网络编程学习笔记(3)
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- 你应当如何学习C++(以及编程)
- 你应当如何学习C++(以及编程)(rev#1)