本系列仅记录个人在复习和学习C++中遇到的一些相对有用的概念,主要目的并非为向其他读者阐明,所以多有错漏、啰嗦之处,如果其中恰好有些东西对您有丝毫帮助,倍感荣幸!
Setting out to C++
代码在不同工作环境的一些调整方法
我使用的是linux下的Qt 5.7.1,编译器默认的C++标准是C++ 98,本书中很多代码使用了C++ 11的新标准,为了适应这一点,可以在CmakeLists.txt中加上这一句:
set( CMAKE_CXX_FLAGS "-std=c++11" )
为了避免练习用的控制台程序输出结果一闪而过的情况出现,可以在主函数return前加上:
cin.get();
The functon header as an interface
函数头是作为程序和程序之间相互调用的接口。请注意,函数头不是头文件.
请注意接口的概念,之后会不断的提到他.
- 主函数的形参列表和被调用 这个概念之前了解的比较透彻了,不过还是记录一下: main()函数一般不被其他函数调用,但是但是形如:
int main(int argc,char** argv)
的函数头是什么意思呢?虽然表面上没有代码调用了main函数,但是在编译中,编译器在程序中添加了代码,这段代码由操作系统启动,调用主函数,并且按照函数头中的参数列表将参数传入主函数中.
头文件与预处理器
看一下这条预处理指令:
# include
预处理是指在编译之前进行的处理.#include<> 是将后面尖括号中的文件加入到程序中去,和源文件组合成一个新的文件用于准备下一步的编译.
因此,iostream可以称为include file,或者head file(头文件).- C++中头文件与c的区别
在形式上,C++的头文件没有.h的后缀,在这个基础上会产生一些头文件中函数的使用方法的区别.
例如:如果使用iostream而非iostream.h,则需要加入命名空间指令:using namespace std;
命名空间
由于在c++中使用的函数和库过于庞杂,可能会出现这种情况:我们导入了两个库,这两个库中都有dout()这个函数,那么当我们在程序中调用dout()这个函数的时候,编译器是如何判断我们到底是想要调用哪个函数的呢?
为了解决这个问题,引入了命名空间的概念,使用using指令,就可以使用特定命名空间内函数:
using namespace std;//在之后的所有代码中都使用命名空间std定义的名称using std::cout;//仅使用std中的cout
函数原型 prototype
在进行编译之前编译器需要知道函数的参数和返回值信息,而这些信息是由函数原型提供的.
与函数头的区别
在形式上函数原型与函数头的区别在于函数原型后面带有分号.与函数定义的区别
函数原型是对于接口的描述,因此函数原型不包括函数的具体实现方式,具体实现方式写在函数定义中. 我们通常把函数原型放在头文件中.