【发布时间】:2016-04-01 06:21:02
【问题描述】:
从这个link,它说
对象、引用、函数(包括函数模板特化)和表达式都有一个名为 type 的属性
所以给出以下内容:
int &&rf_int = 10;
我可以说变量rf_int 是复合类型对 int 的右值引用。
但是在谈到value category时,它特别说
每个表达式都有一些非引用类型
和
每个 C++ 表达式(带有操作数的运算符、文字、变量名称等)
基于以上两条语句,rf_int 可以被视为一个表达式,并且表达式具有非引用类型。
现在我真的很困惑。 rf_int 是否有 reference 类型?在谈论名称的类型时,我们是否必须提供上下文,无论是变量还是表达式?
更具体地说,当在函数调用中使用变量名时:
SomeFunc(rf_int);
现在将rf_int 视为表达式(因此它是 int 类型的左值)还是变量(因此它是类型为 int 的右值引用的左值)?
编辑:here 的评论让我对这个问题感到好奇。
【问题讨论】:
-
术语变量在[basic]p6中定义如下:“变量是由非静态数据成员以外的引用的声明引入的或对象。变量的名称(如果有)表示引用或对象。" 据我了解,name 也没有类型,但对象或引用它所指的有一个类型。比较
decltype(rf_int)和decltype((rf_int))。 -
@dyp
decltype(rf_int)是decltype(*entity*)而decltype((rf_int))是decltype(*expression*),根据decltype -
是的。这就是我的观点:实体
rf_int具有与表达式rf_int不同的(可观察的)类型。或者更确切地说,对于表达式,在进一步分析之前删除了引用。因此,虽然从技术上讲,表达式rf_int具有int&&类型,但对于任何可观察的目的,它具有int类型和值类别lvalue。
标签: c++