可以用使用声明一次性引入名字到当前范围内。
这种方法不像using指令那样把那些名字当成当前范围的全局名来看待,using
声明是在当前范围之内进行的一个什么,这就意味着在这个范围内它可以不顾
来自using指令的名字
//: C10:UsingDeclaration.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#ifndef USINGDECLARATION_H
#define USINGDECLARATION_H
namespace U {
inline void f() {}
inline void g() {}
}
namespace V {
inline void f() {}
inline void g() {}
}
#endif // USINGDECLARATION_H ///:~
//: C10:UsingDeclaration1.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include "UsingDeclaration.h"
void h() {
using namespace U; // Using directive
using V::f; // Using declaration
f(); // Calls V::f();
U::f(); // Must fully qualify to call
}
int main() {} ///:~
using声明给出了标识符的完整的名字,但没有了类型方面的信息
可以把using声明放在任何一般的声明可以出现的地方
using声明与普通声明只有一点不同:using声明可以引起有关函数用相同的
参数类型来重载
无输出
using声明也可以出现在一个名字空间内,其作用与在其他地方时一样:
//: C10:UsingDeclaration2.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include "UsingDeclaration.h"
namespace Q {
using U::f;
using V::g;
// ...
}
void m() {
using namespace Q;
f(); // Calls U::f();
g(); // Calls V::g();
}
int main() {} ///:~
一个using声明是一个别名,它允许在不同的名字空间声明同样的函数
如果不想由于引入不同名字空间而导致重复定义一个函数时,可以使用using
声明,它不会引起如何二义性和重复