文章

总结:using 几种使用场景

1. using 声明 (using declaration)

命名空间中的某一个名字 (变量或函数) 引入到当前作用域中,使得当前作用域访问该名字,不需要使用命名空间,以及全局限定符::

1
2
3
4
5
6
{
    using std::map;
    map<int, std::string> the_map; //ok
}

map<int, std::string> the_map2;  //error

1.1 使用 using 声明,子类可以使用父类中的私有(private)成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Base{
protected:
    int bn1;
    int bn2;
};
 
class Derived: private Base{
public:
    using Base::bn1;
};
 
class DerivedAgain: public Derived{
};

int main() {
  Derived d;
  d.bn1 = 1;  // ok
  d.bn2 = 2;  // error, 'bn2' is a private member of 'Base'
  
  DerivedAgain da;
  da.bn1 = 3; // ok

  return 0;
}

2. 其他使用场景

  • 引入命名空间(using directive);
  • 别名 alias,如: using alias_class_t = myClass;

2.1 template + using 使用方法

1
2
3
4
5
6
7
template<typename Val>
using int_map_t = std::map<int, Val>;
 
int main() {
  int_map_t<int> imap;
  return 0;
}
本文由作者按照 CC BY 4.0 进行授权