auto 和 decltype (C++11 新增)

红色字体为个人推断,可信度自辨。

蓝色字体为重点。

auto类型说明符:使用auto时,编译器会分析表达式,并自动推算出变量所属类型。*auto变量必须有初值

原理:编译器通过 初值 来判断auto变量所属类型。具体匹配规则不清。但整形和浮点推断为int和double。

需要注意:

  1)auto sz = 0, pi = 3.14;  // 错误。sz和pi的类型不一致。

decltype类型指示符:得到表达式对应类型。

使用时机:

  1)需要表达式对应类型,但不需要表达式的值。

  2)需要函数返回类型。

需要注意:

  1)如果返回类型是引用,则必须初始化。

  2)decltype((variable)) 当使用双层括号时,结果一定是引用。

时间: 2024-10-10 18:04:28

auto 和 decltype (C++11 新增)的相关文章

c++11 auto 与 decltype 详解

转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始值. [cpp] view plain co

C++11的auto和decltype关键字

今天Mayuyu要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已经就有了auto关键字,只不过在C++98中auto表示的是临时变量的语义,而在C++11中auto表示自动类型推导,如下 auto关键字可以从表达式中推导出变量的类型,这样就大大简化了编程人员的工作.而且auto是在编译时对变量进行了类型推导,所以不会对程序的效率造成影响,另外auto也不会对编译速度造成太大影响,因为编译时本身也要右侧推导后判断是否与左侧匹配. 另外auto在模板编程中也

C++ 11 学习1:类型自动推导 auto和decltype

Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译器并不是完全支持,比如我正在使用的vs2012.这里是msdn里面VS各版本对C++ 11 的支持 对 C++11 功能的支持(现代 C++) 1.auto auto这个关键字C++原先就有,用来指定存储器.因为很少有人去用这个东西,所以在C++11中就把原有的auto功能给废弃掉了,而变成了现在的

c++11 auto 和 decltype

一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型.和原来那些只对应某种特定的类型说明符(例如 int)不同.auto 让编译器通过初始值来进行类型推演.从而获得定义变量的类型,所以说 auto 定义的变量必须有初始值. 1 //由val_1 和val_2相加的结果可以推断出it

C++之auto与decltype

C++11中新增了两种推倒型别的方法,auto和decltype,从而我们的变量定义就方便了很多. 一.auto关键词是根据其初始化物的类型来推导的. (1)推倒时忽略初始化物本身的const属性.如: int x=0; auto a=x,b=0; cout<<typeid(a).name()<<"\t"<<typeid(b).name()<<endl; 输出: i  i(i代表int类型) (2)若为指针或引用,保留其应指涉物的cons

关于auto和decltype

1 auto会忽略顶层const,保留底层const 2 3 int i = 0; 4 5 const int* const p = &i; 6 7 auto p2 = p; //p2是const int*,不是const int* const 8 //*p2 = 4; //错误,p指向常量 9 p2 = nullptr; //正确,p2本身不是常量 10 11 12 auto不会保留引用类型,应该使用auto& 13 14 int& x = i; 15 16 auto m = x

(转载)你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11) 3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就是利用数组(一种数据组织管理方式,它将多个相同类型的数据元素组织起来,形成一个数据序列以便于访问.更多可以参考后文3.6小节对数组的介绍)来保存一个字符串中的各个字符,最后用一个特

你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就是利用数组(一种数据组织管理方式,它将多个相同类型的数据元素组织起来,形成一个数据序列以便于访问.更多可以参考后文3.6小节对数组的介绍)来保存一个字符串中的各个字符,最后用一个特殊字符'\0'表示字符串的结束,以此来将多个char类型的字符数据串联成字符串.例如: // 定义一个字符数组,用以保存

C++11新增for循环遍历方法

记录C++11新增for循环遍历方法 1.基于迭代器的for循环: for_each位于std命名空间下,我们可以看到其定义如下: inline _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func) { // perform function for each element _DEBUG_RANGE(_First, _Last); _DEBUG_POINTER(_Func); _For_each(_Unchecked(_First), _Un