Я думал, что, используя структурированные привязки и спецификатор auto&
, я могу получить ссылки на элементы структуры и использовать их напрямую, а не проходить через структуру.
Однако следующий код работает, и информация c asserts hold:
struct Test
{
int i;
char c;
double d;
};
Test test{ 0, 1, 2 };
auto& [i, c, d] = test;
i = 4;
c = 5;
d = 6;
// i, c, d are not references !
static_assert(!std::is_same_v<decltype(i), int&>);
static_assert(!std::is_same_v<decltype(c), char&>);
static_assert(!std::is_same_v<decltype(d), double&>);
cout << &i << " == " << &test.i << " (" << std::boolalpha << (&i == &test.i) << ")" << endl; // (true)
cout << test.i << ", " << (int)test.c << ", " << test.d << endl; // 4, 5, 6
Но я думал, что C ++ не позволяет одной переменной иметь более одного имени, за исключением случаев, когда одна переменная является действительной, а другие являются ссылками, но в этом случае переменная i
является такой же как test.i
и ни один из них не является ссылкой.