如果我打印出来std::is_reference<decltype(a)>::value
,我在第一种情况下得到 0,在第二种情况下得到 1。
为什么即使我们可以证明a
并b
引用元组中的元素并且可以通过它们修改这些值?
我不是语言律师,但可能是由于标准的这个项目符号(工作草案):
ife
是命名结构化绑定 [...] 的无括号 id 表达式,decltype(e)
是结构化绑定声明规范中给出的引用类型
边注。您应该使用此表单来执行此操作a
并b
引用元组中的元素:
auto tup = std::make_tuple(1, 2);
auto & [ a, b ] = tup;
它遵循一个最小的工作示例:
#include <tuple>
#include <type_traits>
#include <iostream>
int main() {
auto tup = std::make_tuple(1, 2);
auto & [ a, b ] = tup;
a = 0;
std::cout << a << ", " << std::get<0>(tup) << std::endl;
}
在Coliru上看到它。另一方面,您得到的是使用以下表达式的值的副本:
auto [ a, b ] = std::make_tuple(1, 2);
这是一篇比人类标准更好地解释它并且更易于理解的文章。