【发布时间】:2017-02-23 02:26:34
【问题描述】:
我正在阅读带有多个参数的decltype,根据其他人的说法,它只是验证所有类型都是一致的,如果是这样,则完全丢弃除最后一个参数之外的所有参数。但是似乎传递另一个参数确实会影响返回值:
int i = 7;
decltype(i) var = i;
++var;
cout << i << endl; // prints '7', as I would expect
但是:
int i = 7;
decltype(1, i) var = i;
++var;
cout << i << endl; // prints '8' - apparently 'var' is now a reference to 'i'
为什么会这样?
【问题讨论】:
-
according to everyone else it just validates that all types are consistent and if so, completely discards all parameters but the last one来源是什么?我以前从未见过有人这么说。 -
例如,如果我理解正确的话,这里是:stackoverflow.com/questions/16044514/…。 "一对用逗号分隔的表达式从左到右求值;左边的表达式是丢弃值表达式"、"结果与其右边的操作数属于相同的值类别"
-
试试
decltype((i)) -
与
decltype((i))在两种情况下都打印'8'。那么为什么decltype(i)与其他所有内容不同?或者,换句话说:为什么decltype(i)和decltype((i))表现不同,而decltype(i, j)和decltype((i, j))表现相同?