gpt4 book ai didi

c++ - 为什么 const 按值结构绑定(bind)允许用户修改引用的变量?

转载 作者:行者123 更新时间:2023-12-04 00:49:00 26 4
gpt4 key购买 nike

我对结构绑定(bind)感到困惑。即使我使用 const和按值(没有 & )结构绑定(bind),如下例所示:

#include <iostream>
#include <tuple>

int main()
{
int x = 0;
std::tuple<int&> p(x);
const auto [a] = p;
a++;
std::cout << x << '\n';
}

它仍然修改 x并打印 1 : https://gcc.godbolt.org/z/jc8hxE8M6
如果我添加 &,您能否解释一下为什么它会这样工作并希望进行更改?之前 [a]或删除 const ?

最佳答案

请参阅 cppreference 上的示例:

The portion of the declaration preceding [ applies to the hiddenvariable e, not to the introduced identifiers.

int a = 1, b = 2;
const auto& [x, y] = std::tie(a, b); // x and y are of type int&
auto [z, w] = std::tie(a, b); // z and w are still of type int&
assert(&z == &a); // passes

在哪里 e

A structured binding declaration first introduces a uniquely-named variable (here denoted by e) to hold the value of the initializer, as follows: [...]

const在您的示例中不适用于 a ,为什么它仍然有用,下一个例子演示了:
int a = 1;
const auto& [x] = std::make_tuple(a); // OK, not dangling
auto& [y] = std::make_tuple(a); // error, cannot bind auto& to rvalue std::tuple
auto&& [z] = std::make_tuple(a); // also OK

关于c++ - 为什么 const 按值结构绑定(bind)允许用户修改引用的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68140932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com