【发布时间】:2014-09-28 19:32:17
【问题描述】:
来自 C++ 标准草案 N3337:
7.1.6.2 简单类型说明符
4
decltype(e)表示的类型定义如下:——如果
e是一个无括号的id-expression或一个无括号的类成员访问(5.2.5),decltype(e)是e命名的实体的类型。如果没有这样的实体,或者如果e命名了一组重载函数,则程序是非良构的;——否则,如果 e 是一个 xvalue,
decltype(e)是T&&,其中T是e的类型;——否则,如果e是左值,
decltype(e)就是T&,其中T是e的类型;
如果我理解正确,
int a;
decltype(a) b = 10; // type of b is int
int* ap;
decltype(*ap) c = 10; // Does not work since type of c is int&
您能否解释一下,或指出一些解释为什么 decltype(*ap) 不能只是 int 的文档?
【问题讨论】:
-
我假设你已经知道了 :),但为了记录,你可以使用
std::remove_reference或std::remove_pointer来修改它。 -
@40two,是的,我知道这些实用程序。我试图理解为什么语言是这样定义的。
-
我知道你知道这一点,因为你是这些场所的常见嫌疑人。我能想到的主要原因是在尾随返回中使用
decltype。我想从类型中删除&在尾随返回中会很不方便。 -
@40two,这可能是(a)原因。