【C++】基础知识点回顾 下:auto关键字、范围内的for循环

简介: 【C++】基础知识点回顾 下:auto关键字、范围内的for循环

前言

前两篇文章,我们分别复习了这些知识点

命名空间与输入输出

函数重载、引用和内联函数

今天,我们来学习auto关键字、范围内的for循环

auto关键字

定义

C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

补充知识点:typeid

在C++中,typeid是一个运算符,用于获取表达式的类型信息。当你调用typeid(d).name() 时,它将返回一个表示表达式的类型的字符串。这个字符串通常是编译器特定的,可能不易于阅读,但可以用于调试或其他目的。

要使用typeid,你需要包含头文件<typeinfo>。

例子:

#include<iostream>
#include<typeinfo>
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<iostream>
#include<typeinfo>
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时,必须对其修饰的变量进行初始化,不然编译器无法得知该变量是什么类型,会报错

auto与指针和引用

2.auto和指针以及引用结合使用

需要注意的是:

auto和指针结合使用的时候,*可写可不写

auto和引用结合使用的时候,&必须写

下面给出一段示例代码

#include<iostream>
#include<typeinfo>
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<iostream>
using namespace std;
int main()
{
  auto a = 1, b = 2, c = 3;
  return 0;
}

auto不能做的

auto定义的变量不能作为函数的参数

auto不能直接定义数组

范围内的for循环

定义

在C++11中,引入了一种新的for循环,这种循环是在一定的范围内直接进行循环

语法格式

for (element_type variable : container)
{
}

element_type是要便利的容器内元素的类型

variable 是变量名称,类似于给容器内单个元素进行命名

container是要遍历的容器的名称

给出一个例子:

#include<iostream>
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;
}

运行结果:

nullptr

在C++11中nullptr作为关键字引入,表示空指针,

在需要用到空指针的地方,建议用nullptr而不是null

在此不多做解释

结语

关于auto关键字、范围内的for循环的学习和介绍到这里就结束了,希望对大家有帮助,我们下次见~



相关文章
|
1月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
48 4
|
1月前
|
存储 程序员 C++
【C++小知识】基于范围的for循环(C++11)
【C++小知识】基于范围的for循环(C++11)
|
1月前
|
存储 编译器 C++
【C++关键字】auto的使用(C++11)
【C++关键字】auto的使用(C++11)
|
2月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
2月前
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
|
2月前
|
编译器 C++
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决
|
1月前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
31 0
|
10天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
10天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
|
10天前
|
存储 设计模式 编译器
C++(十三) 类的扩展
本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。