gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:45:43 26 4
gpt4 key购买 nike

我在想 decltype((x)) 给出了 & 引用类型,但是一些实验表明还有其他事情:

#include<stdio.h>
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) 都会给出一个“int&”。然而运行结果是

1
1
1

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

最佳答案

x + 1 是纯右值,所以它的 decltype 只是 int。相比之下,x 是一个 id 表达式,因此 (x) 是一个左值,它的 decltype 是 int&。 (有一个特殊规则,id 表达式本身的 decltype(例如 x)是声明变量的实际类型,您必须将表达式括起来以获取值表达式的类别。)

关于C++11:decltype((x)) 和 decltype((x+1)) 的类型不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381909/

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