sky*_*ack 20 c++ language-lawyer c++17 structured-bindings
昨天我在SO上看到了一个关于结构化绑定的有趣问题.
我们可以总结如下.请考虑以下示例代码:
#include <tuple>
#include <type_traits>
int main() {
auto tup = std::make_tuple(1, 2);
auto & [ a, b ] = tup;
// the following line won't compile for a isn't a reference
// static_assert(std::is_reference_v<decltype(a)>);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下decltype(a)
是int
(可能),因为这种子弹(工作草案):
if
e
是一个未加括号的id-expression,用于命名结构化绑定[...],decltype(e)
是结构化绑定声明规范中给出的引用类型
这是@Curious在评论中为感兴趣的人提供的wandbox片段.它表明实际上a
不是参考,仅此而已.
到目前为止好于原来的问题,OP问为什么它int
,而不是int &
和标准说,看上去像一个可以接受的答案.
无论如何,我想知道委员会为何如此决定.在一天结束时,a
引用元组中的元素,我可以通过修改该元素a
.换句话说,声明a
看起来像一个引用,它的行为类似于引用,但它不是引用.
我可以忍受这个,但我想知道背后的原因是什么.为什么decltype(a)
不能简单int &
?亵渎者可以理解是否有一个有意义的理由?
归档时间: |
|
查看次数: |
1018 次 |
最近记录: |