gpt4 book ai didi

c++ - prvalue 表达式的 decltype 中的 cv 限定符

转载 作者:搜寻专家 更新时间:2023-10-31 01:27:10 25 4
gpt4 key购买 nike

这个问题是在我研究 decltype 行为及其派生表达式类型的规则时提出的。如果表达式是纯右值,是否有任何理由不提升通用 cv 限定符?类型。例如:- 在下面的代码中,表达式 i+j 是由decltype 作为 int 而不是 const int,因为 constness 在这两个变量中是常见的,它可以传播到结果表达式也是如此,虽然表达式本身是临时的并且不是左值,但是当涉及到类型派生时它可能很有用(就像单值表达式的情况一样)。

现有规则:如果表达式的值类别是纯右值,则decltype 产生T

#include<iostream>
#include<string>
#include<type_traits>

using namespace std;

int main(int argc, char* argv[])
{
const int i=10;
const int j=20;
cout << is_same<decltype(i), const int>::value << "," << is_same<decltype(j), const int>::value << endl;
cout << is_same<decltype(i+j), const int>::value << "," << is_same<decltype(i+j), int>::value << endl;
return(0);
}

最佳答案

根据 CPP 标准草案 n4713:

8.2.1 Value category [basic.lval]
...
9. ... Class prvalues can have cv-qualified types; non-class prvalues always have cv-unqualified types.

由于 (i + j) 的计算结果为非类纯右值,因此它将具有 cv 非限定类型,并且在其上使用 decltype 会产生 int

关于c++ - prvalue 表达式的 decltype 中的 cv 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53880562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com