2019.3.23 第九章(下)

第九章 内存模型和名称空间(续)
  1. 声明区域:可以在其中进行声明的区域。
  2. 潜在作用域:从声明位置到其声明区域的结尾。
  3. 定义名称空间:namespace Jack{ }
  4. 名称空间可以是全局的,也可以在另一个名称空间中,但是不能在代码块内。
  5. 默认情况下,名称空间中定义的名称其链接性为外部链接性。(除非它引用了常量。)
  6. 访问给定名称空间中的名称:
  • 作用域解析运算符“::”:std::cout
  • using声明:using std::cout;
  • using编译指令:using namespace std;
  1. 如果某个名称已经在函数内被声明了,则不能用using声明来导入同样的名称。
  2. 函数中的using编译指令将名称空间的名称视为在函数之外声明的,但其他函数无法使用这些名称。
  3. 名称空间可以嵌套:namespace elements{namespace fire{int flame;}}
  4. 使用嵌套:using namespace elements::fire;
  5. 名称空间中仍然可以使用using声明和using编译指令。
  6. 创建名称空间的别名:namespace MEF=myth::elements::fire;可以用于简化嵌套的名称空间。
  7. 省略名称空间的名称来创建未命名的名称空间:namespace{}链接性为内部。
  8. 未命名的名称空间可以用于代替链接性为内部的静态变量的替代品:
static int counts;//通常情况下定义
namespace{
	int counts;//同等效果的定义
}
  1. 通常情况下,将名称空间及包含的函数原型放在头文件中,在另一个源代码中在相同的名称空间中提供函数的定义。
  2. 一些指导原则:
  • 使用在已命名的名称空间中声明的变量,而不是外部全局变量。
  • 使用在未命名的名称空间中声明的变量,而不是静态全局变量。
  • 不要在头文件中使用using编译指令。如果非要使用,应该放在所有#include后。
  • 导入名称时优先使用using声明和作用域解析运算符。
  • 对于using声明,首选将作用域设置为局部,而不是全局。
  • 老式头文件(如math.h)没有使用名称空间,而新式头文件(如cmath)将函数都放在了名称空间std中。

猜你喜欢

转载自blog.csdn.net/FireMCold/article/details/88778184
今日推荐