热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++11:decltype((x))和decltype((x+1))的类型是不同的?

如何解决《C++11:decltype((x))和decltype((x+1))的类型是不同的?》经验,为你挑选了1个好方法。

我以为decltype((x))给出了&reference类型,但是有些实验显示了其他:

#include
int main(){
    int x = 0;
    decltype((x)) r = x;
    r = 1;
    printf("%d\n",x);

    decltype((x+1)) i = x;
    i = 2;
    printf("%d\n",x);

    decltype((1)) k = x;
    k = 3;
    printf("%d\n",x);
    return 0;
}

我期待(x)和(x + 1)和(1)woul都给出"int&".然而,运行结果是

1
1
1

我期望运行结果应该是1,2,3,因为每个decltype检索引用,但似乎只有第一个工作,而两个(x + 1)和(1)只给出int,而不是'int&'.为什么,(x)和(x + 1)是不同的id-expression类型?



1> Kerrek SB..:

x + 1是一个prvalue,所以它的decltype是公正的int.相比之下,x是一个id表达式,因此(x)是一个左值,它的decltype是int&.(有一个特殊规则,通过该规则,id-expression本身的decltype(例如x)是声明变量的实际类型,并且必须将表达式括起来以获取表达式的值类别.)


推荐阅读
author-avatar
羽靜幻雲_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有