C++语法手册
using用法
导入命名空间
1
2
3
4// 导入整个命名空间到当前作用域,这样std::cout就可以写成cout了。
using namespace std;
// 只导入某个变量到当前作用域
using std::cout;一般头文件中要避免使用using导入命名空间。否则引入这个头文件的也相当于导入了命名空间,容易带来命名冲突。
指定别名,C++11中可以使用using来指定别名,作用与typedef相同
1
2typedef int T; // 用 T 代替 int
using T = int; // 用 T 代替 int派生类引入基类成员
1
2
3
4
5
6
7
8
9
10
11class Base {
protected: //此处可以改成public,但不能改成private
int value;
int name;
};
class Derived : private Base { //Base是私有继承
public:
//通过Derived的实例可以访问父类的value,但是无法访问父类的name变量
using Base::value;
};
类型转换
static_cast
1 | class B {}; |
代码中D和B的继承关系不是虚继承(没有virtual修饰继承关系),如果是虚继承,就无法使用static_cast了。
dynamic_cast
1 | class B { |
上述代码有两个关键点:1)D与B的继承关系通过virtual修饰;2)B包含虚函数。只有这两个条件同时满足才能使用dynamic_cast。另外与static_cast区别是:static_cast必然成功,而dynamic_cast失败的情况会返回target-type类型的空指针。
值分类
Value categories介绍了 lvalue/prvalue/xvalue/glvalue/rvalue