C++ auto用法

简介: 1.auto作用auto关键字能够自动识别变量类型。2. auto的原理auto定义的变量会在编译阶段根据右值来推出auto变量的类型。1.使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。2.因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。3.使用auto的细则3.1. auto与指针和引用结合起来使用

1.auto作用

auto关键字能够自动识别变量类型。

2. auto的原理

auto定义的变量会在编译阶段根据右值来推出auto变量的类型。

1.使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。

2.因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。

3.使用auto的细则

3.1. auto与指针和引用结合起来使用

int main()
{
  int a = 10;
  auto b = a;
  auto pa = &a;
  auto* pb = &a;
  auto& c = a;
  return 0;
}

b是auto类型,会根据a的类型推导b的类型。

pa是指针,因为auto修饰的pa会根据右值(&a)来推导出pa的类型。

auto pa = &a和 auto *pa = &a是一样的写法。只不过是:

auto *pa = &a规定pa必须是指针类型,不能是其他类型了。

auto *pa = 10;

这样的代码是错误的,auto* 规定了变量必须是指针类型。给一个10,10是一个字面量,默认是int类型。不符合规则。

3.2 在同一行定义多个变量

一行可以定义多个相同变量。

  auto a = 1, b = 3;

注意:一行的变量必须相同。

  auto c = 2, d = 3.14;

这样的代码就是错误的。

因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

3.3. auto不能作为函数的参数

因为编译器不能对形参的实际类型进行推导。

3.4auto不能作为数组的声明。

void TestAuto()
{
  int a[] = {1,2,3};
  auto b[] = {4,5,6};//错误
}

编译器不知道要开多大的空间。

相关文章
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
39 3
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
3月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
66 4
|
3月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
48 0
|
4月前
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
43 4
|
3月前
|
存储 编译器 C++
【C++关键字】auto的使用(C++11)
【C++关键字】auto的使用(C++11)
|
4月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5