我知道我能做到
auto&& bla = something();
并且根据const的返回值的好坏something,我会为bla.
这是否也适用于结构化绑定情况,例如
auto&& [bla, blabla] = something();
我猜是这样(结构化绑定搭载在auto初始化程序上,其行为如下),但我找不到明确的肯定。
更新:初步测试似乎符合我的预期(const正确推导):
#include <tuple>
using thing = std::tuple<char, int*, short&, const double, const float&>;
int main()
{
char c = 0;
int i = 1;
short s = 2;
double d = 3.;
float f = 4.f;
thing t{c, &i, s, d, f};
auto&& [cc, ii, ss, dd, ff] = t;
c = 10;
*ii = 11;
ss = 12;
dd = 13.;
ff = 14.f;
}
现场演示auto&&,如果正在做它的工作,会出现我所期望的错误:
main.cpp: In function 'int main()':
main.cpp:20:10: error: assignment of read-only reference 'dd'
dd = 13.;
^~~
main.cpp:21:10: error: assignment of read-only reference 'ff'
ff = 14.f;
我仍然想确切地知道这种行为是在哪里指定的。
注意:使用“转发引用”来表示这种行为可能会延长它,但我没有一个好名字来给出const扣除部分auto&&(或模板T&&-就此而言)。