总结很重要啊。
看了几天C++了,总结下基础的东西。
先说说预编译(写个hello world给我整崩溃了):
C++在编译的时候会读#define和#include,然后做相应的替换。
如果
头文件太大,被太多文件include的话,编译就很慢了,也没必要include一次就编译一次。
所以就整了个预编译技术:在我们创建工程的时候自动会生成stdafx.h,这个文件一般包含一些头文件,这些被包含的文件基本上不会怎么修改,所以我们只需要把stdafx.h文件编译一下,生成一个预编译头文件.pch;编译器会在编译.cpp文件时,将这个预编译头文件加入其中;所以如果我们自己写的.cpp文件没有#include "stdafx.h" 第一行就会出现编译出错。
.h文件是不能编译的,所以会生成一个stdafx.cpp的空文件,这个文件只有一句#include "stdafx.h",这个文件的目的就是为了编译stdafx.h文件。
同样,如果我们没有先编译stdafx.h,而是先编译我们自己写的.cpp文件就会出现找不到.pch文件。
再说说命名空间:
这命名空间也没撒特别,想成一个作用域就ok了。
这个命名空间给我整得也郁闷,最开始写
#include <iostream>
想使用cout,但是就是不能用,一查资料才
发现这是标准化后需要命名空间的支持。
我就纳闷了标准库中的东西,既然是标准,为什么就不整个
全局命名空间嘛。还要显示的使用std空间名称。
宏
宏,我个人
理解就是把复杂的或者不容易理解的东西重新定义一个名称吧了,当然也有其他功能;如#pragma.
宏的替换和inline区别是:inline替换否由编译器决定。
替换就是空间换时间。
sizeof
这个就是看一个类型分配的空间大小。如 sizeof(int) //4
有几个特殊情况sizeof(1==1) //1 或者 4(VC6) 这个有点蛋疼,我想了大半天(还是不懂)。
struct s{
char c;
int i;
};
sizeof(s) //8 (本来是5,但是结果应该是i(4)的倍数)
struct s1{
char c;
s ss;
char c1;
};
sizeof(s1) //16 (1+3 + 4 + 1+3,位界是按s中最大的来算)
如果struct中有double,float就又不一样。一般放在开头或者结尾,占得空间最小。
//第一课结束。路过的朋友指正哈