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

标签 c++ oop stl initializer-list

当我尝试对包含引用的成员使用初始值设定项列表时,出现以下错误:

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/

相关文章:

c++ - 将数组分成两组?

c++ - 是否可以在声明中修复堆栈的大小?

java - 如何检查数组是否已满,如果未满则添加到它?

oop - Scala扩展参数化抽象类

c++ - C++标准是否保证cin、cout等先创建后销毁?

c++ - C++ 标准是否保证插入关联容器失败不会修改右值引用参数?

c++ - 计算出多少客户端可以连接到我正在使用的某些tcp服务器代码

c++ - 返回语句中 vector 初始化的编译错误

c++ - 错误 C2679 : binary '[' : no operator found which takes a right-hand operand of type 'overloaded-function'

javascript - 为什么要在函数及其原型(prototype)上设置属性?