gpt4 book ai didi

c++ - const 上的结构化绑定(bind)

转载 作者:可可西里 更新时间:2023-11-01 14:59:09 25 4
gpt4 key购买 nike

下面的代码可以编译吗?

#include <type_traits>

void foo() {
const std::pair<int, int> x = {1, 2};

auto [a, b] = x;

static_assert(std::is_const_v<decltype(a)>);
static_assert(std::is_const_v<decltype(b)>);
}
  • MSVC说“是的!”。
  • GCC说“哦,不,伙计!”。
  • Clang说“不行!”。

那么,这是 MSVC 错误吗?

这里的标准并不简单(我快速浏览了一下),但考虑到 auto 的规则,我想,ab 应该被复制并丢弃 cv-qualifier

最佳答案

Is the following code supposed to compile?

事实并非如此。这是一个 MSVC 错误。

A structured binding declaration引入一个新名称(仅用于规范),e ,声明如下:

auto e = x;

e 的类型叫做E ,并且由于初始化器是类似元组的,因此绑定(bind)的类型由 tuple_element_t<i, E> 给出.在这种情况下 Epair<int, int> , 所以这两种类型只是 int . decltype 的规则结构化绑定(bind)的方法是给出 referenced type , 所以 decltype(a)decltype(b)都是int .

这里的重要部分是 ab (结构化绑定(bind))来自发明的变量(e),不是它的初始值设定项(x)。 e不是 const因为你刚刚声明了它 auto .我们正在做的是复制 x ,然后将绑定(bind)放入此(非 const)拷贝中。

关于c++ - const 上的结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329651/

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