① 命名空间的使用 - 为了防止命名冲突
例如: using namespace std; 或者 std::加具体的类方法
② 在子类中引用基类成员
示例:
class Base {
public:
Base():value(55) {}
virtual ~Base() {}
void Test1(void) { cout << "Base Test1" << endl; }
protected:
int value;
};
class Derived : private Base { // 私有继承,基类中的所有变量和函数都不可再子类中直接调用
public:
using Base::value; // 在public处用 using 声明之后,在子类中就可以使用基类的 value 变量了
using Base::Test1; // 子类中可以调用基类中所有Test1的同名接口 注意: using 只是引用,不参与形参的指定,所以Test1的所有同名重载函数都可以调用
};
③ 别名指定,功能基本与typedef类似,但是也有差异,C++11 中,鼓励用using而不用typedef
示例: using Myint = int; Myint a; 等价于 int a;
using 和 typedef 的差异之处:
在定义一个函数指针别名时,使用 using 的可读性比 typedef 更强
示例:
using FP = void(*)(int, const string&);
typedef void(*FP)(int, const string&);
FP f; // 表示 f 是一个返回值为 void, 第一个参数为int类型,第二个参数为const string&类型的函数指针。
using FP2 = std::string (FOO::*)(const std::string&);
typedef std::string (FOO::*FP2)(const std::string&);
FP2 f2; // 表示 f2 是一个FOO类中的成员函数,它的返回值为std::string类型,接受一个参数,类型为const std::string&类型
using 可以用来定义模板别名,而 typedef 是做不到的。
示例:
typeplate <typename T>
using VEC = MyVector<T, MyAlloc<T>>;
VEC<int> vec; // ok
typeplate <typename T>
typedef MyVector<T, MyAlloc<T>> VEC;
VEC<int> vec; // fail
using的三种使用方法
于 2024-02-07 18:37:46 首次发布