为何原变量未被两次递增?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
相关产品推荐
相关产品推荐

