章节目录

第七章总结

本节阅读量:

快速审阅

我们在这一章中涵盖了许多材料。

复合语句或块是一组零个或多个语句,编译器将其视为单个语句。块以{符号开始,以}符号结束,要执行的语句放在两者之间。块可以在允许单个语句的任何地方使用。块的末尾不需要分号。块通常与if语句一起使用,以执行多个语句。

用户定义的命名空间是您为自己的声明定义的命名空间。C++(如全局命名空间)或库(如命名空间std)提供的命名空间不被视为用户定义的命名空间。

可以通过域解析操作符(::)访问命名空间中的声明。域解析操作符告诉编译器,应该在左侧操作数的范围内查找右侧操作数指定的标识符。如果未提供左侧操作数,则假定为全局命名空间。

局部变量是在函数中定义的变量(包括函数参数)。局部变量具有块作用域,这意味着它们从定义点到定义它们的块的末尾都在作用域内。局部变量具有自动存储期,这意味着它们在定义点创建,在定义它们的块末尾销毁。

在嵌套块中声明的名称可以隐藏外部块中同名的变量。这应该避免。

全局变量是在函数外部定义的变量。全局变量具有文件范围,这意味着它们从声明点到声明它们的文件末尾都是可见的。全局变量具有静态存储期,这意味着它们在程序启动时创建,在程序结束时销毁。

标识符的链接属性确定该名称的其他声明是否引用同一对象。局部变量没有链接。具有内部链接的标识符可以在单个文件中看到和使用,但不能从其他文件访问。具有外部链接的标识符既可以从定义它们的文件中看到,也可以从其他代码文件中使用(通过前向声明)。

尽可能避免非常量的全局变量。Const 全局变量通常被认为是可以接受的。如果编译器支持C++17,请将inline用于全局常量。

可以通过static关键字为局部变量指定为静态存储期。

限定名是包含关联域的名称(例如,std::string)。非限定名称是不包括范围限定符的名称。

using语句(包括using声明和using指令)可以用于避免必须用显式命名空间限定标识符。using声明允许我们使用非限定名称(没有域名)作为限定名称的别名。using指令将命名空间中的所有标识符导入using指令的范围。通常应避免这两种情况。

内联函数最初被设计为,请求编译器用函数代码的内联扩展替换函数调用。现在不需要为此目的使用inline关键字,因为编译器通常会自动完成。在现代C++中,inline关键字用于将函数从单个定义规则中排除,从而允许将其定义导入到多个代码文件中。内联函数通常在头文件中定义,它们可以被包含在任何需要它们的代码文件中。

最后,C++支持未命名的命名空间,它隐式地将命名空间的所有内容视为具有内部链接。C++还支持内联命名空间,这为名称空间提供了一些原始版本控制功能。


7.12 未命名与内联的命名空间

上一节

8.0 控制流简介

下一节