C++ 11的类型推导 auto

作者: dongwenbo | 来源:发表于2017-01-20 16:20 被阅读179次

在声明变量时使用auto代替类型,C++编译器就会自动推导出变量的类型

auto sum = 1 + 1;

sum被推导为int,使用auto声明的变量必须要被初始化

联合声明中的类型推导
auto a = 1,b = 2;//正确,a和b都被推导为int
auto c = 3,*pa = &a;//正确,c和pa都有基本数据类型int
auto d = 4,e = 1.2;//错误,联合声明中类型必须相同

联合声明中类型必须相同,Swift笑而不语

auto和复合类型
auto i = 0, &ri = i;
auto a = ri;

a初始化的是r引用的变量值,所以a被推导为int

auto i = 0, *pi = &i;
auto a = pi;

a初始化的是一个指针,所以a被推导为一个int *

auto和常量
int i = 0;
const int ci = i, &cr = ci;
auto b = ci;//b是int
auto c = cr;//c是int
auto d = &i;//d是int *
auto e = &cr;//e是const int *

因为使用引用就是使用引用的值,所以不会被推导为引用类型。ci的类型是const int,由于使用的是ci的值得类型,所以b,c会被推导为int
因为ciconst,所以指向ci的指针必须是只读指针(const int *),所以e被推导为const int *

如果需要bconst int,则需要显示声明

const auto b = ci;//b是const int

如果想要推导为引用类型,则需要:

auto &g = ci;//g是const int的引用
auto &h = 42;//错误,非常量引用不可以绑定字面值
const auto &j = 42;//正确,常量引用可以绑定字面值,j就是42的另一个名字

由于ciconst,所以指针e和引用g都会被推导为顶层const

注意:
联合声明中的类型必须一致,const属于基本数据类型的一部分,所以const也需要一致,而*&则从属于声明符,不参与。

auto k = ci, &l = i;//正确,k和l基本类型为int
auto &m = ci,*p = &ci;//正确,m和p都为const int
auto &n = i,*p2 = &ci;//错误,n为int 而 p2 为const int

以后涉及到新标准,就不再研究了

相关文章

  • Item 1Understand template type d

    引子 模板类型推导是Modern C++特性auto的基础,但模板类型推导和auto类型推导有一些区别,具体看正文...

  • 模板类型推导与auto

    本文聊聊C++中的模板类型推导和auto。两者其实是一样的,前者推导T的类型,后者推导auto的类型。本文初创于公...

  • C++ auto 类型推导

    C++ auto 类型推导规则与模板类型推导[https://www.jianshu.com/p/6490ea37...

  • C++ 11的类型推导 auto

    在声明变量时使用auto代替类型,C++编译器就会自动推导出变量的类型 sum被推导为int,使用auto声明的变...

  • C++11带来的优雅语法

    自动类型推导 auto auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推...

  • auto类型推导与const

    auto类型推导规则 C++11中新增了使用auto进行自动类型推断的功能,从此使用容器等复杂类型时,可以简化代码...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

  • Item 2 Understand auto type dedu

    引子 模板类型推导与auto类型推导是具有映射关系的。auto扮演T的角色,而类型限定符扮演ParamType的角...

  • effective modern C++笔记 第二章

    1. auto类型推导与模板类型推导的相同点 Type类型在包含auto的时候,本质上Type和ParamType...

  • [C++11阅读][3-2-3]auto类型推导(下)

    auto搭配指针和引用 auto可化为推导后的类型,如果等号右边是指针,推导出来也带指针,此时auto*和auto...

网友评论

    本文标题:C++ 11的类型推导 auto

    本文链接:https://www.haomeiwen.com/subject/gxowbttx.html