gpt4 book ai didi

c++ - 为什么我不能在 `std::initializer_list` 中使用引用类型

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:00 25 4
gpt4 key购买 nike

当我尝试为包含引用的成员使用初始化列表时,出现以下错误:

no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’

我已经阅读了几篇相关的文章,但首先,他们似乎得到了不同的错误;其次,他们将引用的使用限定为“毫无意义”。

在不进行哲学讨论的情况下,我真的很想知道是否有可能使下面的示例起作用:

#include <vector>

class Exp {
};

class Integer : public Exp {
public:
const int value;
Integer(const int val) : value(val) { }
};

int main() {

const auto a1 = Integer(1);
const auto a2 = Integer(2);

const std::vector<const Exp&> va{a1,a2};
}

vector 类是否缺少构造函数?非常感谢!

gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413

[编辑以删除虚假示例]

最佳答案

虽然这在标准中没有明确说明,但尝试使用标准库容器来存储非对象类型应该被视为未定义的行为。请参见 [container.requirements.general],

p1: "容器是存储其他对象的对象......"

p4: "... X 表示包含类型为T 的对象的容器类..."

等等。

关于c++ - 为什么我不能在 `std::initializer_list` 中使用引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256840/

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