我希望能够将结构化绑定分解std::pair<T, U>
为非常量变量和常量变量:
例如
std::pair<int, int> anExamplePair = std::make_pair(1, 2);
auto [nonConstVariable, constVariable] = anExamplePair;
这是可能的还是合理的?或者我必须将结构化绑定中的两个变量都设为 const 或非常量?
我希望能够将结构化绑定分解std::pair<T, U>
为非常量变量和常量变量:
例如
std::pair<int, int> anExamplePair = std::make_pair(1, 2);
auto [nonConstVariable, constVariable] = anExamplePair;
这是可能的还是合理的?或者我必须将结构化绑定中的两个变量都设为 const 或非常量?
这根本不是结构化绑定所做的。结构化绑定(隐式)声明一个变量,并且
auto
或任何其他类型说明符应用于该变量。get
赋予结构化绑定的名称的使用方式就好像它们命名了对该单个变量的子对象的引用,或者根据类型元组接口命名了调用的结果。这些引用可能是或不是
const
-qualified。这并不(纯粹)取决于您是否const
在结构化绑定中使用。类型可以定义其元组接口,以便const
无论const
变量本身如何,它们始终是或从不是 -qualified。在 的情况下,
std::pair
是const
通过std::pair
的元组接口继承的,因此这里const
的变量决定了新引入的名称是否都像const
引用一样。无法将另一个名称添加const
到其中一个名称的类型中。没有语法。具体来说,根据您的确切示例,结构化绑定实际上引入了的副本
anExamplePair
,并且两个名称将引用该副本中的元素。如果您想要引用 ,则应该使用auto&
而不是。auto
anExamplePair
如果你给这个对起了名字,那么使用结构化绑定就没有任何意义了。与
const
这也允许您明确地给出-qualifier。结构化绑定只是语法糖,以避免必须命名完整对象(并且可能避免
std::get
多次明确书写)。