1.类型推断
int Max(int a, int b) { return a > b ? a : b; } //错误,没有推断依据 //auto Max(auto a, auto b) //{ // return a > b ? a : b; //} int main() { //常量 auto pInt = 1; //表达式 int x = 0; int y = 1; auto z = x + y; //函数指针 auto pMax = Max; cout << pMax(1, 3) << endl; //获取推断类型,也就是整个表达式就是我们的类型 decltype(x + y) b = x + y; //decltype(x+y)得到的int,即b的类型为int //打印类型,类型萃取 cout << typeid(Max).name() << endl; //类型为 int __cdecl(int,int) return 0; }
2.C++中const
C++中对const要求严格。const在定义时必须初始化且变量不能被修改。
int main() { //以下为等效写法 const int a = 10; int const b = 10; //以下两种也等效 const int* pa = &a; //修饰的是指针所指向内存中存储的数据类型是不可修改的 pa = &b; int const* paa = &a; //修饰指针 int a_num = 101; int* const pac = &a_num; //pac++; 错误,const修饰了pac,不可修改 return 0; }
3.C++类型转换
int main() { //C语言方式 int a = (int)1; //C++最朴素的转换方式 int aa = int(1.11); //不朴素的方式 /*const_cast 去掉const属性 static_cast 一般数据类型转换 reinterpret_cast 指针类型转换,一般把空类型指针转为其他类型指针 dynamic_cast 多态*/ int x = 0; const int* p = &x; //*p=1001 错误,p所指内存中存储的数据被const修饰 //int* pconst = p; 错误 int* pp = const_cast<int*>(p); //等效c语言强转 int*pp=(int*) p; *pp = 1001; //*p=1001 错误 int num = static_cast<int>(1.11); int g_num = 1001; void* pVoid = &g_num; int* pInt = reinterpret_cast<int*>(pVoid); cout << *pInt << endl; return 0; }