3 回答
TA贡献1862条经验 获得超6个赞
using namespace std
using std::swap
TA贡献1801条经验 获得超16个赞
使用-声明:
using std::vector;
使用指令:
using namespace std;
using namespace std;
std::
std
std
template< typename T >void foo( T& x, T& y){ using std::swap; // makes std::swap available in this function // do stuff... swap( x, y); // will use a T-specific swap() if it exists, // otherwise will use std::swap<T>() // ... }
简单地说:您可以而且应该在实现文件中自由地使用声明和指令之后的命名空间。 #include
指示和感觉很好。尽管重复了相反的断言,使用声明和指令的命名空间并不是邪恶的,它们也没有违背名称空间的目的。相反,它们是使名称空间可用的原因。
A 使用-声明
将名称添加到本地范围。一个 使用指令不;它只是在声明名称的作用域中呈现可访问的名称。例如: namespaceX { int i , j , k ;}int k ;void f1(){ int i = 0 ; using namespaceX ; // make names from X accessible i++; // local i j++; // X::j k++; // error: X::k or global k ? ::k ++; // the global k X::k ++; // X’s k}void f2(){ int i = 0 ; using X::i ; // error: i declared twice in f2() using X::j ; using X::k ; // hides global k i++; j++; // X::j k++; // X::k}
本地声明的名称(由普通声明或使用声明)隐藏同名的非本地声明,并且在声明点检测到名称的任何非法重载。
注意歧义错误 k++
在……里面 f1()
..全局名称不优先于全局范围内可访问的名称空间中的名称。这提供了防止意外名称冲突的重要保护,而且-重要的是-确保不会从污染全局命名空间中获得任何好处。
当声明许多名称的库可以通过使用-指令访问时,未使用名称的冲突不被视为错误,这是一个很大的优势。 ...
我希望与传统的C和C+程序相比,在使用名称空间的新程序中使用全局名称的情况会大大减少。名称空间的规则是专门为“懒散”的全局名称用户制定的,而不是为了避免污染全局范围的人而制定的。
std
#includes
- 3 回答
- 0 关注
- 420 浏览
添加回答
举报