前两篇文章,我们分别复习了这些知识点
命名空间与输入输出
函数重载、引用和内联函数
今天,我们来学习auto关键字、范围内的for循环
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
在C++中,typeid是一个运算符,用于获取表达式的类型信息。当你调用typeid(d).name() 时,它将返回一个表示表达式的类型的字符串。这个字符串通常是编译器特定的,可能不易于阅读,但可以用于调试或其他目的。
要使用typeid,你需要包含头文件
例子:
#include
#include
using namespace std;
int main()
{
int a = 0;
char c = 'a';
cout << typeid(a).name() << endl;
cout << typeid(c).name() << endl;
return 0;
}
运行结果:
学习过运算符typeid之后,我们来继续学习auto
上面提到了,auto会自动推导变量的类型,下面给出一段代码,方便大家理解
#include
#include
using namespace std;
int XX()
{
return 1;
}
int main()
{
auto i = 1;
auto c = 'c';
int a = 10;
auto b = a;
auto x = XX();
cout << typeid(i).name() << endl;
cout << typeid(c).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(x).name() << endl;
return 0;
}
运行结果:
通过上面这段代码,我们可以知道,auto可以自动推导元素的类型
1.使用auto时,必须对其修饰的变量进行初始化,不然编译器无法得知该变量是什么类型,会报错
2.auto和指针以及引用结合使用
需要注意的是:
auto和指针结合使用的时候,*可写可不写
auto和引用结合使用的时候,&必须写
下面给出一段示例代码
#include
#include
using namespace std;
int main()
{
int x = 10;
auto a = &x;
auto* b = &x;
auto& c = x;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
*a = 20;
cout << x << endl;
*b = 30;
cout << x << endl;
c = 40;
cout << x << endl;
return 0;
}
在同一行定义多个变量的时候,要注意:这些变量的类型都必须相同
不然程序会报错
下面给出一个例子:
#include
using namespace std;
int main()
{
auto a = 1, b = 2, c = 3;
return 0;
}
auto定义的变量不能作为函数的参数
auto不能直接定义数组
在C++11中,引入了一种新的for循环,这种循环是在一定的范围内直接进行循环
for (element_type variable : container)
{
}
element_type是要便利的容器内元素的类型
variable 是变量名称,类似于给容器内单个元素进行命名
container是要遍历的容器的名称
给出一个例子:
#include
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5 };
for (int num : arr)
{
cout << num << " ";
}
cout << endl << "-------------" << endl;
for (int xx : arr)
{
cout << xx << " ";
}
return 0;
}
在C++11中nullptr作为关键字引入,表示空指针,
在需要用到空指针的地方,建议用nullptr而不是null
在此不多做解释
关于auto关键字、范围内的for循环的学习和介绍到这里就结束了,希望对大家有帮助,我们下次见~