C++11 具有多个参数的'decltype'的含义
我在哪找到的 OP和回答者似乎都认为C++11 具有多个参数的'decltype'的含义,c++11,C++11,我在哪找到的 OP和回答者似乎都认为 decltype(t,u)取决于t和u的类型 我假设decltype(t,u) 在链接问题中,是与 t和u,在某种意义上是最小的和兼容的。 如果其含义类似于§5(9)或定义中的普通类型 对于§20.9.7.6(3)中的std::common_type,则预期含义为 decltype(true?t:u) 然而,C++11似乎只定义了一个参数decltype。 也就是说,解析器被指定为接受decltype(expression) 其中表达式可以是以逗号分隔的赋值
decltype(t,u)
取决于t
和u
的类型
我假设decltype(t,u)
在链接问题中,是与
t
和u
,在某种意义上是最小的和兼容的。
如果其含义类似于§5(9)或定义中的普通类型
对于§20.9.7.6(3)中的std::common_type
,则预期含义为
decltype(true?t:u)
然而,C++11似乎只定义了一个参数decltype
。
也就是说,解析器被指定为接受decltype(
expression)
其中表达式可以是以逗号分隔的赋值表达式列表。
重新阅读§7.1.6.2(4)中的decltype
规范,
我必须将decltype(t,u)
解释为decltype((u))
问:那么什么是decltype(t,u)
呢?我错过什么了吗
编辑:当答案集中在“这是逗号运算符”上时,我仍然希望看到
您对它是
decltype((u))
(对声明类型的引用)还是decltype(u)
(声明类型)的判断。我怀疑是前者。逗号这里是运算符,不是参数分隔符这里是运算符,不是参数分隔符这里是运算符,不是参数分隔符这里是运算符,不是参数分隔符这里是运算符,不是参数分隔符它使用逗号运算符。所以t,u是u类型。它使用逗号运算符。所以t,u是u类型。它使用逗号运算符。所以t,u是u类型。它使用逗号运算符。所以t,u是类型u。假设decltype(u)
产生某种类型u
(声明的类型u
),那么decltype((u))
和decltype((t,u))
将是类型u&
。因此,如果我们假设decltype(t,u)
与decltype((t,u))
相同,那应该与decltype((u))
相同,而不是decltype(u)
,对吧?假设decltype(u)
产生某种类型u
(声明的u
),那么decltype((u))
和decltype((t,u))
将是U&
类型。因此,如果我们假设decltype(t,u)
与decltype((t,u))
相同,那应该与decltype((u))
相同,而不是decltype(u)
,对吧?假设decltype(u)
产生某种类型u
(声明的u
),那么decltype((u))
和decltype((t,u))
将是U&
类型。因此,如果我们假设decltype(t,u)
与decltype((t,u))
相同,那应该与decltype((u))
相同,而不是decltype(u)
,对吧?假设decltype(u)
产生某种类型u
(声明的u
),那么decltype((u))
和decltype((t,u))
将是U&
类型。因此,如果我们假设decltype(t,u)
与decltype((t,u))
相同,那么应该与decltype((u))
相同,而不是与decltype(u)
相同,对吗?谢谢,我怀疑是这样的。但是我的解释是否正确,这使得返回的类型引用了声明的u
类型,也就是说,decltype((u))
而不是decltype(u)
?我不确定我是否在遵循。为什么括号必须与内容的类型相关?我没有从标准草案中寻找确认,但似乎编译器(g++,vc,intel)同意您的意见:decltype(t,u)
isdecltype((u))
这是因为decltype有两种情况,一种是直接引用对象,decltype(var),decltype(obj.var)和decltype(ptr->var)是var的类型。其他所有内容都使用表达式的规则,其中xvalue变成T&,左值变成T&而其他所有内容都变成T。谢谢,我怀疑。但是我的解释是否正确,这使得返回的类型引用了声明的u
类型,也就是说,decltype((u))
而不是decltype(u)
?我不确定我是否在遵循。为什么括号必须与内容的类型相关?我没有从标准草案中寻找确认,但似乎编译器(g++,vc,intel)同意您的意见:decltype(t,u)
isdecltype((u))
这是因为decltype有两种情况,一种是直接引用对象,decltype(var),decltype(obj.var)和decltype(ptr->var)是var的类型。其他所有内容都使用表达式的规则,其中xvalue变成T&,左值变成T&而其他所有内容都变成T。谢谢,我怀疑。但是我的解释是否正确,这使得返回的类型引用了声明的u
类型,也就是说,decltype((u))
而不是decltype(u)
?我不确定我是否在遵循。为什么括号必须与内容的类型相关?我没有从标准草案中寻找确认,但似乎编译器(g++,vc,intel)同意您的意见:decltype(t,u)
isdecltype((u))
这是因为decltype有两种情况,一种是直接引用对象,decltype(var),decltype(obj.var)和decltype(ptr->var)是var的类型。其他所有内容都使用表达式的规则,其中xvalue变成T&,左值变成T&而其他所有内容都变成T。谢谢,我怀疑。但是我的解释是否正确,这使得返回的类型引用了声明的u
类型,也就是说,decltype((u))
而不是decltype(u)
?我不确定我是否在遵循。W