当我尝试对包含引用的成员使用初始值设定项列表时,出现以下错误:
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/