auto
- C++中
auto
用于定义变量时自动推断数据类型 - 所以使用
auto
定义的变量必须拥有初始值 - 且
auto
将忽略顶层const
1,保留底层const
2int main(){ const int * const p_1 = new int(0); /* 虽然p_1既有顶层const,也有底层const 但p_2只保留底层const 下面的语句等价 const int *p2 = p_1; */ auto p_2 = p_1; p_2 = new int(0); //手动管理内存不要忘了释放的好习惯 delete p_1; delete p_2; return 0; }
- 通过
auto
,还可以实现函数返回值的类型推断 - C++11增加了尾指返回类型,其基本格式如下
auto func(agrs) -> ret_type{}
- C++14增加了返回类型自动推断,其基本格式如下;但函数中所有
return
的返回值类型必须一致(不会进行隐式类型转换)auto func(args){}
decltype
decltype(expression)
用于获取表达式的静态类型
,其并不会实际执行表达式- 如果表达式是对指针的解引用,其获取引用类型
- 如果表达式是加上括号的变量,其获取引用类型
int call(){ cout << "hello"; return 0; } int main(){ //并不会调用call(),直接解析call的返回值类型 decltype(call()) data_1 = 0; //data_1++表达式返回一个int数值 decltype(data_1++) data_2 = 0; //++data_1表达式得到的是一个int引用 decltype(++data_1) ref_1 = data_1; //加上括号的变量得到引用类型 decltype((data_1)) ref_2 = data_1; //指针的解引用得到引用类型 int *p = &data_1; decltype(*p) ref_3 = data_1; return 0; }
typeid
typeid(expression
用于获取表达式的动态类型
信息,其返回一个type_info
类型的常量对象- 其也不会真正执行表达式
- 下面给出
typeinfo
中常用的成员函数#include <typeinfo> class type_info { ... public: /* @return 描述类型名字的C风格字符串 不同编译器对同一个类型的返回结果可能有所不同 */ const char *name() const; /* @todo 重载 == 运算符 判断两个type_info对象的类型名是否相同 */ bool operator==(const type_info& __arg) const; ... };
结语
- 有任何错误评论区指正,共同进步