计算机是个很神奇的玩意,因为它是由我们的“意识”创造出来的另一种截然不同的“意识”。数以兆计的微弱电流在一片片不到半个指甲盖大小的芯片上流动,居然就这么支撑起现在的信息时代,这在古人看来确实是匪夷所思的。
现在的计算机十分强大,看视频、上网、玩游戏都已不足为奇。不过,在计算机尚未发展成为家喻户晓的电子产品之前,人们面对的都是黑底白字的屏幕——也就是所谓的命令行界面(终端)。
C++ 便是在这个年代出现的,亦因此它最先支持的与人们交互的方式也便是使用命令行界面。
我们便从这里开始,迈出第一步。
我们即将看到的是本书的第一个 C++ 程序——不用担心,不必看懂,瞅一下就好了:
#include <iostream>
// 第一个程序——在屏幕上显示 "Hi, C++ World!"
int main()
{
/*
这里是一切的开始,你接下来要让计算机做的事情都是从这里开始执行的。
被执行的内容以 int main() {...} 包裹,它们用于表达这是一个“主函数”。
“函数”可以被理解为是一段可以被执行的过程。
*/
// 接下来我们要在屏幕上打印文字了,使用了来自标准库的 cout 与 endl
std::cout << "Hi, C++ World!" << std::endl;
// 在最后,我们要作收尾工作——向运行这个程序的操作系统报告没有异常,并结束程序的运行。
return 0;
}
其中,以//
开头或以/*
与*/
包裹的内容称作注释。它并不是写给计算机看的,而是写给我们人类看的——例如这段程序的用途与原理,或者,其实写什么都可以:
// 这是一段注释,可以写在除了以 # 开头的任意一行行尾。
// 从 "//" 开始,到这一行的结束,这部分都将会被当作注释。
// 请注意,注释不是程序本身的一部分,在 C++ 编译这个程序的时候会直接跳过注释。
/*
这是一块注释,可以换行写。
从 "/*" 开始,到最近的一个 "* /" 结束为止(中间无空格),均为注释。
*/
刚开头的一句#include
用于向这个程序导入支持库,在此程序中导入的是名为iostream
的一个库。这个库用于支持std::cout
与std::endl
这两个对象。如果不先包含这个库,std::cout
与std::endl
便也无法使用。
像这样以 # 开头的语句称作预编译语句。它并不是程序本身的一部分,但它却对程序能否正确编译至关重要。
int main () {
与}
之间的内容是主程序,一切都是从这里开始的。其中的每一条语句都会按从头到尾的顺序执行。main
用于声明一个主函数,而int main()
后紧跟的一对花括号便是主函数中的内容。
在这个程序的主函数中,便有两条语句:
std::cout << "Hi, C++ World!" << std::endl;
return 0;
每一条语句的末尾应当写一个分号(;
),以表示这个语句的结束,就像汉语中的句号(。)与英语中的句点(.)一样。
cout
与endl
分别是 Console Out (控制台输出) 与 End Line (结束一行) 的缩写,分别用于输出内容到屏幕与换行。从cout
开始,要想输出什么内容,需要先写<<
,然后再写想输出的内容。"Hi, C++ World"
是一个字符串,用一对双引号包裹起来,其中写上我们想要输出的内容。换行用的endl
是一个操纵符,用于控制cout
。使其刷新并换下一行输出。
在我们的程序中,cout
与endl
都被加上了std::
这个前缀。STD 是标准库(Standard Library)的缩写,它是 C++ 语言体系中的重要组成部分。iostream
这个库便是由标准库提供的,它提供的诸如cout
与endl
这样的内容,都被打包进了一个名为std
的命名空间中。我们需要先进入这个名为std
的命名空间(也就是加std::
的前缀),然后才能使用其中的cout
与endl
。
在后续的学习中,我们将会遇到更多来自标准库的内容。使用由标准库提供的工具时,要记得在其前加上
std::
。为了保证文章的代码部分篇幅始终,后续正文的代码中将不再为标准库对象前加std::
。章节提供的随例源代码文件则不受影响。
return
在主函数中用于直接结束程序的运行,其后所跟的 0 则是程序结束时反馈给操作系统的状态码。在大多数操作系统中(如 Win NT 系列与 *nix 系列),0 意味着程序是顺利执行完成并正常结束运行的。
如果看不懂,没关系,尚未有过基础时入门一个新的学科并非易事。当遇到都不懂的地方时,最好的办法是再多读几遍,并尝试结合上下文阅读。书读百遍,其意自现。
在下一节中,我们将完整地配置一回手头的计算机,执行刚刚的第一道程序。