我知道我能做到
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&&
-就此而言)。