我是靠谱客的博主 超帅摩托,最近开发中收集的这篇文章主要介绍c++浅谈decltype类型指示符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

decltype类型指示符相当于auto指示符的改进版,使用此类型指示符能让被定义变量的类型指定为程序中已有,而我们不好直接写出的(比如某个函数的输出结果有多种数据类型的可能,而下面我们要定义的变量类型需与函数返回值类型一致),便可以使用decltype类型指示符。

例如:

decltype (f()) sum=x;//sum的类型为函数f的返回类型

应注意,在其他类型指示符下,引用都作为所指对象同义词出现,但用在decltype下,引用类型由decltype()括号中的引用类型决定。

例如:

const int ci=0, &cj=ci;
decltype(ci) x=0;//x是
decltype(cj) y=x;//y是const int&类型的引用,引用必须赋初值

如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型,出现这种情况说明表达式结果对象能作为一条赋值语句的左值。

如:

int i=42,*p=&i,&r=i;
decltype(r) b=i;//这样直接使用r的话由于r是个引用,定义的b也是int &类型的
//引用,就需要赋初值。

但如果想让结果是r所指向的类型而非r的类型,即想让结果为数值而非引用,则需将r作为表达式的一部分,即:

decltype(r+0) b;//这样就得到一个不需要初始化的int类型变量b了

此外,如果表达式内容为解引用操作,,则decltype将得到引用类型。因为解引用指针将得到指针所指的对象,并且可以给该对象赋值。

decltype(*p) c=i;//解引用后得到的类型为int &,需要赋初值
//这里的解引用可以通俗的理解为,定义指针p指向&i,则p表示&i的地址,*p表示的
//就是&i本身,这样decltype得到的就是int &类型

还有很重要的一点需要注意,对于decltype使用的表达式,若不在表达式外加括号,则得到的结果是该变量类型;若在表达式外还有一对括号,则编译器将其视为可作赋值语句左值的特殊表达式,在c++中,若表达式为赋值语句如i=x,则该表达式的类型为引用类型(若i为int,则decltype(i=x)的类型为int &类型),因此,在编译器将双括号语句视为赋值语句时,decltype将会得到引用类型。

decltype((i)) d=i;//表达式"i"外还有一对括号,得到的是引用类型int &
decltype(i) e;//无括号,得到i的变量类型int

decltype(( ))的类型永远是引用,decltype()的结果只有当表达式本身是一个引用时才是引用

最后

以上就是超帅摩托为你收集整理的c++浅谈decltype类型指示符的全部内容,希望文章能够帮你解决c++浅谈decltype类型指示符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部