栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11新特性-----类型推导(auto、decltype、强弱类型语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11新特性-----类型推导(auto、decltype、强弱类型语言)

C++ 提供了 auto 和 decltype 来静态推导类型,在我们知道类型没有问题但⼜不想完整地写出类型的时候, 便可以使⽤静态类型推导。 auto:
for(vector::const_iterator it = v.begin(); it != v.end(); ++it);
// 可以改写为
for(auto it = v.begin(); it != v.end(); ++it);
虽然写起来和动态语⾔(如 JavaScript 的 var )很像,但 C++ 仍然是强类型的,会执⾏静态类型检查的语⾔。这只是语法上的简化,并未改变C++ 的静态类型检查。
这里解释一下强类型语言和弱类型语言:

强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。

java、.NET、C/C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

例如你有一个整数,如果不显式地进行转换,你不能将其视为一个字符串。

与其相对应的是弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值

decltype: decltype ⽤于获取⼀个表达式的类型,⽽不对表达式进⾏求值(类似于 sizeof )。 decltyp(e) 规则如下:

1.若 e 为⼀个⽆括号的变量、函数参数、类成员,则返回类型为该变量/参数/类成员在源程序中的声明类型;

2.否则的话,根据表达式的值分类(value categories),设 T 为 e 的类型:

  • 若 e 是⼀个左值(lvalue,即“可寻址值”),返回 T& ;
  • 若 e 是⼀个临终值(xvalue),则返回值为 T&& ;
  • 若 e 是⼀个纯右值(prvalue),则返回值为 T
const std::vector v(1);
const int&& foo(); // 返回临终值:⽣命周期已结束但内存还未拿⾛
auto a = v[0]; // a 为 int
decltype(v[0]) b = 0; // b 为 const int&
 // 即 vector::operator[](size_type) const 的返回值类型
auto c = 0; // c, d 均为 int
auto d = c; 
decltype(c) e; // e 为 int,即 c 的类型
decltype((c)) f = e; // f 为 int&,因为 c 是左值
decltype(0) g; // g 为 int,因为 0 是右值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号