关于C++表达式与语句的传说
?
本想一鼓作气继续我的C++之路,但昨天开会,项目新开发新的功能,so,C++学习之路可能会搁置一定时间,不过我会坚持,因为有博客的监督(写博客是一个好习惯),那么接下来就直接进入正题。
这里做一个简单的测试
class="cpp"> int cnt = 10, ix = 0; vector<int> vec; while (0 < cnt) { vec.push_back(cnt--);//采用后置caozuofu.html" target="_blank">操作符 //vec.push_back(--cnt);//采用前置操作符 cout << vec[ix] << endl; ++ix; }
?这里vec[ix]输出的值有所不同,在于操作符前后置的缘故,前自增操作和后自增操作都使其操作数+1。
区别在于:前自增操作将修改后操作数的值作为表达式的结果值;
???????????????? ?而后自增操作将操作数原来的、未修改的值作为表达式的结果值。
?
一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚的表明指针不再指向任何对象。
?
C++的预处理:
?? 什么是C++的预处理:
?? C++的预处理(Preprocess),是指在C++程序源代码被编译之前,由预处理器(Preprocessor)对C++程序源代码进行的处理。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的符号用来支持宏调调用。
?
预处理器的功能:
预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译、布局控制和宏替换4种。
??? 文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。
??? 条件编译:#if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。
??? 布局控制:#progma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。
??? 宏替换:? #define,这是最常见的用法,它可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。
?
stdafx.h的解释:
stdafx.h名称的英文全称为:Standard Application Framework Extensions
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
?
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
?
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的MFC实现文件第一条语句都是:
#include? "stdafx.h"。
?