C++中的关键字"using"可以与"namespace"以外的内容一起使用吗?
Can the keyword "using" in C++ be used with something except of "namespace"?
关键字
using in C++可以与关键字命名空间以外的其他内容一起使用吗?如果没有 - 那么为什么我们不能简单地写"命名空间..."?如果是 - 请您举例说明它在"非命名空间"上下文中的用法吗?
谢谢。
关键字using
有多种不同的用途:
- 您可以声明命名空间中的所有名称都不需要带有 using 指令的命名空间前缀,例如
using namespace std
. - 您可以声明命名空间的特定成员不需要带有 using 声明的命名空间前缀,例如
using std::vector
. - 您可以声明基类的成员函数不应隐藏在派生类中,例如,
using B::f;
B
是基类,f
是该基类的可能重载成员。 - 您可以声明基类的构造函数应继承,例如
using B::B;
. - 您可以绑定模板参数并为模板命名或将其用于别名类型,例如
template <typename T> using singleton = std::pair<int, T>;
.
是的,您可以using
一个名称。例如
using std::swap;
仅对从命名空间std
swap
执行"使用",而
using namespace std;
拉入 STD 中的每个名称。
是的。它用于声明命名空间成员。例如:
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::fn"; }
void g(char) { std::cout << "B::gn"; }
void h(int) { std::cout << "B::hn"; }
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::fn"; } // D::f(int) overrides B::f(int)
using B::g;
void g(int) { std::cout << "D::gn"; } // both g(int) and g(char) are visible
// as members of D
using B::h;
void h(int) { std::cout << "D::hn"; } // D::h(int) hides B::h(int)
};
最后,它自 C++11 以来用于定义类型别名,包括模板别名:
using vector_of_bool = std::vector<bool>;
template<typename T>
using vector_t = std::vector<T>;
这些示例摘自有关using
关键字的 cppreference.com 文档。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- C++ 如何将关键字"friend"与两个类的成员函数一起使用 相互包含
- 自动关键字与智能指针一起
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- C 关键字只能仅与iostream一起使用吗?除关键字之外,只能与iostream一起使用
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- C++ 将运算符关键字与模板一起使用
- 将覆盖关键字和最终关键字与相同的成员函数一起使用是否有用
- 将内联关键字与模板一起使用是否有意义
- C++中的关键字"using"可以与"namespace"以外的内容一起使用吗?
- 如何将指针与delete关键字和析构函数一起使用