编程语言的学习不像数学,先有定义后有公理,再有定理与领域,数学我们可以理解为一个倒金字塔,由一点发散出整个理论体系。编程像一个梯形,基础部分有茫茫多的概念,上层较宽发散开来。这就导致我们很难用循序渐进的固定思路去了解programming language
为了说明问题,我们常常采用一些代码的比较与示例,至于这些代码是什么意思,我们无法递归定义,这是编程技术的特点,需要我们先拥有一些基础理解(也是工程学科的共性)
1.Modern C++
C++发明于上世纪80年代,作为一门通用语言,在设备驱动、操作系统、信息管理系统甚至游戏程序都可以见到C++的使用。书中强调了C++的性能优势,指出比其他语言要快的特点。C++11标志着C++的现代化
诸如lambda表达式、auto类型推导、range-for等等的新特性使得C++越来越跟进时代。容器、智能指针、RAII等技术替代了传统的编程方式,同时不丢掉安全的特点。C++20在C++14、C++17小缝小补的基础上又成为里程碑式的版本。C++20新特性主要包括modules、ranges、concepts
2.Standard Libraries
20章会简要介绍STL中的内容,但建议还是另找资源对STL进行学习
3.C++ Program Concepts
使用VS2022选用C++20版本即可成功运行上面这段示例代码,C++20模块已经在VS中可用
Source Files
一般.cpp/.cc/.cxx/.c++是源文件的后缀
Comments and Whitespace
第1、2、8行都是单行注释,//开头,还有一种C语言中带来的多行注释:
Standard Library Modules
第4行是导入声明,使得iostream模块中导出的功能在本文件中可用
可以看到<iostream>中导出了输入输出流的对象cin】cout等等
Functions
函数结构就不说了,编程语言多多少少都介绍过返回值、函数名、参数列表、函数体等等概念
Statements
通常翻译为语句。以分号结束的叫语句,比如示例代码中answer变量的定义。
大括号有时也是语句的一种,叫语句块statement block。比如main函数体就是一个{}
Namespaces
std::表明后面的内容属于std这个命名空间(又叫名字空间),双冒号::叫做the scope resolution operator作用域解析操作符。
main函数不能定义在namespace里,即默认属于全局命名空间,因此我们也经常看到::sth的写法,表示使用全局命名空间的某对象
代码风格、关键字等等就不讲了
Creating an Executable
这张图画的很详细,讲了从源文件到可执行程序的全过程
基础概念就提这么多,下面来看两道练习: