第二章 开始学习C++
这章比较基础,没有太多没学过的,我把书上的内容一页页过了一遍,将有些小细节记录下来。
1.main函数会被启动代码调用,启动代码是程序和操作系统之间的桥梁。
2.int main()才是C++标准格式,尽管void main()也可以被使用,但是它并不适用于所有系统。
3.#include<……>是预处理器操作,在编译开始前会用头文件的内容替换掉#include<……>。
所有的预处理命令都以#开头,预处理命令主要包括宏定义、文件包含、条件编译。include属于文件包含。
4.关于新旧风格的头文件
头文件C++旧式风格(如iostream.h)与新式风格(如iostream)的区别在于前者调用库函数,使用的是全局命名空间;后者未定义全局命名空间,需要使用namespace std。
4.关于using namespace std。
using 是一个编译指令,在此条语句中,using 使得名称空间std中的所有名称都可以用。
名称空间的详细解读可以看这个博客:命名空间(namespace)详解
如果不使用using指令(仅以std为例),也可以直接在cout或者cin前面加上std::,如std::cout。(这里要注意名称空间中可以包含对象、函数、变量等等等等,cin/cout是i/ostream类的对象,而不是函数,不是函数,不是函数!这是大多数人学习可能会进入的误区)
e.g.
#include <iostream>
int main()
{
std::cout << "Hello world!\n";
return 0;
}
或者更好的办法是只声明想要使用的变量(不过应该也没人会创个变量叫cout什么的吧?!):
#include <iostream>
using std::cout;
int main()
{
std::cout << "Hello world!\n";//如果在这个程序中使用cin就会出错
return 0;
}
自己码的关于名称空间的小练习:
#include <iostream>
using namespace std;
namespace EXAMPLE_1
{
int k = 1;
}
namespace EXAMPLE_2
{
namespace EXAMPLE_3//名称空间可以嵌套
{
int func(int x, int y)
{
return x + y;
}
}
}
int main()
{
using namespace EXAMPLE_1;
using EXAMPLE_2::EXAMPLE_3::func;//这样声明的时候要注意不能以名称空间名结尾
cout << "EXAMPLE_1::k="<<k<<endl;
cout << "EXAMPLE_2::EXAMPLE_3::func=1+1=" << func(1,1)<< endl;//函数、类、结构体等等同理
return 0;
}
5.函数似乎没有啥好讲的,除了形参与实参值以及返回值值得注意一下。
这里说两点,一是在设计函数时,个人感觉最好在最前面声明函数原型,尽管不是必要的,但是可以避免不必要的错误,以及使程序的框架更加清楚;二是main函数中结尾的return 0,这个0值是返回给操作系统的,通常返回值为0意味着程序运行成功。
第二章的复习题和练习都比较简单,跳过。