C ++中的关键字使用是否可以用于关键字命名空间之外的其他内容? 如果不是 - 为什么我们不能简单地写“名称空间...... ”?如果是 - 您可以在“非命名空间”上下文中提供一些使用示例吗?
感谢。
答案 0 :(得分:11)
关键字using
有多种不同的用途:
using namespace std
。using std::vector
。using B::f;
其中B
是基类,f
是可能重载的成员这个基类。using B::B;
。template <typename T> using singleton = std::pair<int, T>;
。答案 1 :(得分:5)
是的,你可以using
一个名字。例如
using std::swap;
仅对swap
命名空间std
进行“使用”,而
using namespace std;
在标准中提取每个名字。
答案 2 :(得分:3)
是。它用于声明命名空间成员。例如:
namespace homebrew
{
template<typename T>
struct vector {};
}
int main()
{
{
using namespace std;
vector<T> v; //Refers to std::vector
}
{
using homebrew::vector;
vector<T> v; //Refers to homebrew::vector
}
}
也用于对班级成员做同样的事情:
#include <iostream>
struct B {
virtual void f(int) { std::cout << "B::f\n"; }
void g(char) { std::cout << "B::g\n"; }
void h(int) { std::cout << "B::h\n"; }
protected:
int m; // B::m is protected
typedef int value_type;
};
struct D : B {
using B::m; // D::m is public
using B::value_type; // D::value_type is public
using B::f;
void f(int) { std::cout << "D::f\n"; } // D::f(int) overrides B::f(int)
using B::g;
void g(int) { std::cout << "D::g\n"; } // both g(int) and g(char) are visible
// as members of D
using B::h;
void h(int) { std::cout << "D::h\n"; } // D::h(int) hides B::h(int)
};
最后,它从C ++ 11开始用于定义type aliases,模板别名包括:
using vector_of_bool = std::vector<bool>;
template<typename T>
using vector_t = std::vector<T>;