C++学习笔记---开题篇
2010-04-02 12:09
239 查看
写在前面:
我06年升入烟台大学,大一下学期开始接触C++,掐指算来接触C++也有三年有余。但是真正学习C++的时间几乎为零。我们当时学的是谭浩强的《c++程序设计》清华大学出版社。学完这本书后,开始长达一年的空白阶段。大三开始重温C++,期间读了《More Effective C++》《C++ STL》《More Effective STL》等书籍。
大二下学期开始学习MFC,一直到现在只学的皮毛。后来又接触了Qt设计。欲感C++的博大精深。也感到自己C++基础薄弱。故,重温C++。分享自己学习的心的。也希望大家能够指出其中的不足。
一个问题:
question:i++,++i,i+=1的区别?
先来看一下一位资深网友的回答:
“计算机内部实现过程有别,详细如下:
i=i+1的过程相当:
temp=i+1; i=temp;
i++的过程相当:
temp=i; i=temp+1; return temp;
++i的过程最简单:
i增1然后return i 的值,一步完成,没有给任何temp变量赋值”
现在为了测试这句话的正确性,我编辑一个最简单的代码来查看汇编测试:
int i=0;
i++;
++i;
i+=1;
汇编效果:
可以看出并没有什么区别。但是计算机组成原理中曾经提到:++i和i++单句用的时候,编译器就按照i += 1;处理了.
于是更改为复合语句来实现。代码如下:
结果汇编效果如下:
我们这样可以看到他们之间的区别。上面那位网友所言甚是。
写在最后:
以后的笔记我以《c++ primer中文版》为基石,加入自己的看法。希望大家能指出其中的不足,指正其中的错误。我们在追求技术巅峰的路上,共勉之。
我06年升入烟台大学,大一下学期开始接触C++,掐指算来接触C++也有三年有余。但是真正学习C++的时间几乎为零。我们当时学的是谭浩强的《c++程序设计》清华大学出版社。学完这本书后,开始长达一年的空白阶段。大三开始重温C++,期间读了《More Effective C++》《C++ STL》《More Effective STL》等书籍。
大二下学期开始学习MFC,一直到现在只学的皮毛。后来又接触了Qt设计。欲感C++的博大精深。也感到自己C++基础薄弱。故,重温C++。分享自己学习的心的。也希望大家能够指出其中的不足。
一个问题:
question:i++,++i,i+=1的区别?
先来看一下一位资深网友的回答:
“计算机内部实现过程有别,详细如下:
i=i+1的过程相当:
temp=i+1; i=temp;
i++的过程相当:
temp=i; i=temp+1; return temp;
++i的过程最简单:
i增1然后return i 的值,一步完成,没有给任何temp变量赋值”
现在为了测试这句话的正确性,我编辑一个最简单的代码来查看汇编测试:
int i=0;
i++;
++i;
i+=1;
汇编效果:
i++; 0040102F mov eax,dword ptr [ebp-4] 00401032 add eax,1 00401035 mov dword ptr [ebp-4],eax 108: 109: ++i; 00401038 mov ecx,dword ptr [ebp-4] 0040103B add ecx,1 0040103E mov dword ptr [ebp-4],ecx 110: 111: i = i + 1; 00401041 mov edx,dword ptr [ebp-4] 00401044 add edx,1 00401047 mov dword ptr [ebp-4],edx 112: 113: i += 1; 0040104A mov eax,dword ptr [ebp-4] 0040104D add eax,1 00401050 mov dword ptr [ebp-4],eax
可以看出并没有什么区别。但是计算机组成原理中曾经提到:++i和i++单句用的时候,编译器就按照i += 1;处理了.
于是更改为复合语句来实现。代码如下:
int i = 0; if ( ++i ) { printf("先增再用" ); } int j = 0; if ( j++ ) { printf("用了再增"); }
结果汇编效果如下:
if ( ++i ) 004113E5 mov eax,dword ptr [i] 004113E8 add eax,1 004113EB mov dword ptr [i],eax 004113EE je wmain+47h (411407h) if ( j++ ) 0041140E mov eax,dword ptr [j] 00411411 mov dword ptr [ebp-0DCh],eax 00411417 mov ecx,dword ptr [j] 0041141A add ecx,1 0041141D mov dword ptr [j],ecx 00411420 cmp dword ptr [ebp-0DCh],0 00411427 je wmain+80h (411440h)
我们这样可以看到他们之间的区别。上面那位网友所言甚是。
写在最后:
以后的笔记我以《c++ primer中文版》为基石,加入自己的看法。希望大家能指出其中的不足,指正其中的错误。我们在追求技术巅峰的路上,共勉之。
相关文章推荐
- C++学习笔记之struct和union(结构和共用体)
- 高质量C++/C编程指南学习笔记(上)
- C++学习笔记之零碎知识点(三)
- C++基础知识学习笔记(二)
- c++学习笔记:类的若干基础问题
- JAVA中使用JNI调用C++代码学习笔记
- 【C++学习笔记】返回桌面等特系统殊路径地址 —> SHGetSpecialFolderPath
- C++学习笔记
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- C++学习笔记(十二)虚继承
- C++学习笔记 2nd —— 数据的定义与显示
- C++学习笔记 6th —— 结构体
- 转载:C++ list 类学习笔记
- C++学习笔记: CreateToolhelp32Snapshot
- 《21天学通C++(第五版)》 [美] Jesse Liberty Bradley Jones著——个人学习笔记
- C++学习笔记--第一章 C++概述
- C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C++学习笔记十九-多重继承与虚继承
- c++技巧学习笔记(1)
- 2012/1/21 《C++ Primer Plus》第八章:函数探幽 学习笔记