重新系统的过一遍c++,感觉还是把基础打牢些。简单写一下以前没有注意过的或者稍重要的点。忘大佬们轻弹。
1. main()函数是被启动代码调用,是程序和操作系统之间的桥梁,同样的main()函数的返回值也就是返回给操作系统,通常的约定是退出值为0的时候意味着程序的运行成功,非0则为未成功。同时main不是关键字,它不是言语的组成部分,但是它是一个必不可少的函数名称,它可以作为一个变量名,但是不推荐。(可以看下样例)
#include <iostream>
int main()
{
int main=6;
std::cout<<main;
return 0;
}
2. c++和c一样,使用一个预处理器,该程序在主编译之前对源文件进行处理。比方说使用#include <iostream>的编译指令,那么该编译指令会导致预处理器将iostream文件的内容添加到程序中,这是一种典型的预处理的操作。那么可能会说为什么把iostream的文件内容添加到程序中,因为c++的输入输出方案涉及到iostream的多个定义,如果你的程序需要用到输入输出与外界交互,就需要该定义。
3. 关于命名空间的话,书上说如果使用iostream而不是iostream.h,则应该在下面使用命令空间编译指令来时iostream的定义对程序可用。也就是加上using namespace std; 但是你现在在程序上用iostream.h的话,你会发现会提示这个错误。我们先不看这个内容,继续看下去就是类,函数,变量都是c++编译器的标准配件,它们都放置在mingchengkongjianstd内,仅当头文件没有扩展名h的时候情况才是如此。还是和上面的结果一样,然后百度一下,解释应该是这样的。
首先#include进去的就是别人帮你写好的库,你可以直接调用头文件里面封装好的函数或类,比如你用的cin cout等就是c++标准库里面的函数,这样你就不用自己写一个函数cin 来实现输入功能,也不用写函数cout来实现输出功能,直接调用就可以了。
然后早期的c++库内容有限,可随着时间的推移,库的功能越来越强大,每个厂商之间可能将库里面的函数或类取了相同的名字,比如说A公司的库就可能定义了一个叫做sum的函数,而B公司也定义一个叫做sum的函数,于是就出现问题了,程序员开发时,如果同时使用了A的库,又使用了B公司的库,那么就可能出现混乱,你调用的sum到底是哪家公司的。最初,人们就想了个办法,厂商将名字取得更长更复杂来避免重复,可这样做却给编写和阅读带来了困难。后来,人们创造了命名空间这个概念(1998年),它能有效地指出某个标示符到底属于哪个库。这样做带来了一个新的问题,c++发展了那么多年(直到1998年推出命名空间,大约发展了16年),现存的代码已经有一定的量了,你突然给我搞了一个命名空间,以前可没这东西,我以前写的代码就不能再新的编译器下运行了,这可不行。
于是人们想出了一个办法。为包装了std的那部分标准库构件创建出新头文件名。并且把新的头文件名字取和旧头文件相同,但不加后缀.h。所以<iostream.h>变成了新版头文件<iostream>,<complex.h>变成了<complex>,而新旧头文件的功能基本上相同的(但不完全相同),所以使用<iostream>时,想要调用里面的函数,就得使用类似std::cin的方法来说明cin是使用标准库里面的函数
当使用<iostream.h>时,使用的是全局命名空间,也就是早期的c++实现(c++标准已经明确表示不支持这种用法了,所以理论上来说这种用法是非法的,但编译器厂商有可能还支持这种用法)
当使用<iostream>时,该头文件没有定义全局命名空间,必须使用命名空间 std来说明你所使用的函数或类是来自iostream的。
所以以前是有iostream.h,但是现在不支持了,但可能有的编译器支持。所以现在要用cin,cout等std的函数,都需要加上名称空间的申明了。
新版C++对待旧版C++和旧版C语言的方式差别在于,明确提出不再支持C++头文件.h的使用,但任然支持C语言头文件.h的使用。这也是为什么现在的C++代码有的使用了.h,也可能不加.h。
4. 用流的思想理解cin和cout,cout输出的时候可以看成它把输出的内容插入到了输出流当中,cin同理从输入的信息流入定义的变量中。
5. 函数名和对象名也都不是关键字,在程序中将同一个名称(比方说cin)用作对象名和变量名会把编译器搞糊涂,也就是说在不使用cin对象进行输入的时候可以把cin作为变量,但是不能在同一个函数里把 cin同时作为对象名和变量名。
6. c++程序的模块叫函数!!!
7. 编译器指出cout是一个未知标识符的时候导致出现的原因可能是:没有包含iostream头文件;未使用名称空间std。
解决的方案当时就是加上对应的头文件,using namespace std;或者std::cout
8. using namespace std的作用当然就就是使用名称空间std,使得接下来的程序都能使用放在std内封装好函数。