尽量使用using声明而不是using编译指令

[[Cpp]] 中给出了 using 声明和 using 编译指令来简化命名空间中对名称的使用。using 声明使特定的标识符可用,using 编译指令使整个名称空间可用。
一般来说,使用 using 声明比使用 using 编译指令更安全,这是由于它只导入指定的名称。如果该名称与局部名称发生冲突,编译器将发出指示using 编译指令导入所有名称,包括可能并不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器并不会发出警告。另外,名称空间的开放性意味着名称空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。[1]

using 声明的示意

namespace Jill {
	double bucket(double n) { ... }
	double fetch;
	struct Hill { ... };
}  
char fetch;
int main() {
  using Jill::fetch;  // put fetch into local namespace
  double fetch;       // Error! Already have a local fetch
  std::cin >> fetch;       // read a value into Jill::fetch
  std::cin >> ::fetch;     // read a value into global fetch
  ...
}

上例中的 using Jill::fetch 在函数内部进行了 using 声明,那么在 main 函数中,fetch 就代表了 Jill::fetch

Reference


  1. [[C++ Primer Plus(第6版)中文版]] Chap. 9 ↩︎

posted @ 2023-10-12 20:18  pomolnc  阅读(16)  评论(0编辑  收藏  举报