1. auto使用
C++11新增了一个工具,让编译器可以根据初始值的类型推断变量的类型,为此它重新定义了auto的含义。
#include<iostream>
#include<stdlib.h>
//自动变量,自动获取类型,输出,泛型
void main()
{
auto num = 10;//自动变量,自动匹配类型
auto numA = 10/3.0;
std::cout << num <<" " << numA << std::endl;
system("pause");
}
另外auto变量还可以自动循环一维数组,而且和类型无关,具有泛型编程的思想。
#include<iostream>
#include<stdlib.h>
//自动变量,可以实现自动循环一维数组
//自动循环的时候,对应的必须是常量
void main()
{
int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// double num[10] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };
//num数组名是一个指针常量
//auto 自动循环 begin endl;,必须是一个数组的常量
//
for (auto data : num)//泛型C++语法,循环一维数组,常量
{
std::cout << data<<std::endl;
}
system("pause");
}
2. typeid的使用
typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。
我们可以利用typeid来获取一个变量的类型,更加详细的解释可以参考这两篇文章, typeid详解, 知乎: typeid如何得出变量的类型?
示例代码
#include<iostream>
#include<stdlib.h>
int main()
{
double a(10.9);
double * p(&a);
auto b(p); // 使用auto变量可以通用传入接口
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(p).name() << std::endl;
std::cout << typeid(b).name() << std::endl; // 使用typeid可以利用name()获取我们的变量的类型
system("pause");
return 0;
}
输出:
3. decltype使用
有的时候我们还会遇到这种情况,我们希望从表达式中推断出要定义变量的类型,但却不想用表达式的值去初始化变量。还有可能是函数的返回类型为某表达式的的值类型。在这些时候auto显得就无力了,所以C++11又引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器只是分析表达式并得到它的类型,却不进行实际的计算表达式的值。
#include<iostream>
#include<stdlib.h>
int main()
{
double a(10.9);
double * p(&a);
auto b(p); // 使用auto变量可以通用传入接口
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(p).name() << std::endl;
std::cout << typeid(b).name() << std::endl; // 使用typeid可以利用name()获取我们的变量的类型
decltype(a) d_b(12.9); // decltype可以通用的备份接口,自动创建指定的类型名字
decltype(p) d_p(&a); //比如我们可以通过decltype来创建一个类型名字。
system("pause");
return 0;
}
后记, 目前自己学习C++学习只是停留在知道这个东西,但是很多内部的原理还不是很清楚,在之后的学习过程中多总结。