You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何原变量未被两次递增?C++ decltype代码运行疑问

这段C++代码的运行原理解析

先贴出你提到的代码:

#include <iostream>
using namespace std;

int main () {
    int a = 3, b = 4;
    decltype(a) c = a;
    decltype((b)) d = a;
    ++c;
    ++d;
    cout << c << " " << d << endl;
}

运行结果为4 4,核心差异来自decltype的两种推导规则:

  • 当decltype的操作数是不带括号的变量名时,推导的是变量的原始值类型:
    decltype(a) c = a; 中,a是不带括号的变量名,所以decltype(a)得到int类型。c是独立的int变量,只是初始值拷贝了a的3。++c只会修改c自身,和a无关,执行后c=4,a仍为3。

  • 当decltype的操作数是带括号的变量表达式时,推导的是变量的左值引用类型:
    decltype((b)) d = a; 中,(b)是带括号的表达式,所以decltype((b))得到int&(int的左值引用)。d是a的引用,相当于a的别名。++d本质是修改a的值,执行后a=4,d作为引用,值也同步变为4。

最后输出时,c的值是4,d绑定的a值也是4,因此结果为4 4。

内容的提问来源于stack exchange,提问作者Maki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:57:16