速查:C++ 语法 ==================== .. hint:: 本章是 C++ 基础语法的总结,适用于有其他编程语言经验的读者快速熟悉 C++ 语法。 C++ 基础语法包括: * 语句以分号 ``;`` 结束。 * 语句块以一对花括号 ``{...}`` 标识范围。缩进与换行并不重要。 * 注释: * 行内注释: ``//`` 将其同一行内右侧的内容标记为注释。 * 多行注释: 包含在 ``/*`` 与 ``*/`` 内部的内容标记为注释。 * 多行注释\ **不支持嵌套**\ ,因此在调试中注释掉多行代码时,推荐用行内注释的方式注释每一行。 * 变量类型 * 常量 const * 要在多个文件中共享常量,在头文件声明中使用 ``extern``\ ,在源文件定义中使用 ``extern`` 并将其初始化。 * 浮点数:一般使用 double 而不是 float。 * 整数:通常使用 int * 字符(char)与字符串(std::string): * 字符使用单引号(如 ``'a'``\ ),字符串使用双引号(如 ``"abc"``\ )。不可混用。 * 需转义的字符:引号 ``'``\ 、双引号 ``"``\ 、问号 ``?``\ 与反斜线 ``\``\ 。 * C++ 字符串允许跨行:如果两个字符串之间只有空白符(空格、缩进或换行),那么它们是一个整体。 * C++ 字符串的\ **实际长度为字面长度加 1**\ ,因为它总包含一个末尾的 ``\0`` 字符。 * 字符串 s 的 ``s.size()`` 返回字面长度,如 ``string s = 'abc';`` 得到 ``s.size()`` 为 3 * ``s.size()`` 将返回一个 ``string::size_type`` 类型的\ **无符号整数**\ ;因此,不要将其与带符号数进行运算,例如 ``int n = -1;`` 将通常导致 ``s.size() < n`` 为 true。 * 字符串 s 合法索引 i 应满足 0 <= i < s.size() * 我们常提到 C 风格字符串,它的类型是 ``const char*``\ ,即常量字符指针。 * C++ 的\ **字符串字面值并不属于 std::string 类型**\ ,而是常量字符数组。 * 引用:引用不是对象,只是对象的别名。引用在声明时给标识符添加 ``&`` 前缀。 * 指针:指针记录对象的地址。指针在声明时给标识符添加 ``*`` 前缀。 * 指针在初始化或赋值时,赋值号右侧使用取地址符 ``&`` * 指针在调用指向对象时,使用解引用符 ``*`` * 常量指针 ``Type *const p``\ ,指向常量的指针 ``const Type *p`` * 控制语句: * for 循环:循环变量在循环体结束后不可使用。 * 范围 for 循环 |cpp11| 对可迭代对象进行迭代,无需循环变量 * if 条件:支持 ``else if`` 分支语句块。 * switch 条件: * case 标签必须是\ **整型常量表达式**\ 。 * 每个 case 标签内部一般均用 ``break;`` 结尾。 * 用 ``default:`` 处理未匹配任何 case 标签的情形。 * try..catch 及 throw 语句: * 常使用 ```` 库中定义的异常。基础的为 ``std::runtime_error``\ 。 * 使用 ``err.what()`` 来检查错误对象 err 中包含的异常信息。 * throw 抛出的异常如果没有被捕获,程序将会终止。程序中任何之后的内容都不会再被执行。