为什么我不能在 `std::initializer_list` 中使用引用类型
Why I can't use a reference type inside a `std::initializer_list`
当我尝试为包含引用的成员使用初始化列表时,出现以下错误:
no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’
我已经阅读了几篇相关的帖子,但首先,他们似乎得到了不同的错误;其次,他们限定了引用 "as pointless".
的使用
在不进行哲学讨论的情况下,我真的很想知道是否有可能使下面的示例起作用:
#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
class 缺少构造函数?非常感谢!
gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413
[编辑以删除虚假示例]
Although this is not explicitly stated in the standard, attempting to use standard library containers to store non-object types should be regarded as undefined behaviour. See [container.requirements.general],
p1: "Containers are objects that store other objects..."
p4: "... X
denotes a container class containing objects of type T
..."
等等。
谢谢大家!!!我现在已经确定了这个解决方案:
std::array<const std::reference_wrapper<const Exp>, 2> ae{a1,a2};
我需要进行更多调查,但我认为这会满足我现在的要求。
当我尝试为包含引用的成员使用初始化列表时,出现以下错误:
no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’
我已经阅读了几篇相关的帖子,但首先,他们似乎得到了不同的错误;其次,他们限定了引用 "as pointless".
的使用在不进行哲学讨论的情况下,我真的很想知道是否有可能使下面的示例起作用:
#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
class 缺少构造函数?非常感谢!
gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413
[编辑以删除虚假示例]
Although this is not explicitly stated in the standard, attempting to use standard library containers to store non-object types should be regarded as undefined behaviour. See [container.requirements.general],
p1: "Containers are objects that store other objects..."
p4: "... X
denotes a container class containing objects of type T
..."
等等。
谢谢大家!!!我现在已经确定了这个解决方案:
std::array<const std::reference_wrapper<const Exp>, 2> ae{a1,a2};
我需要进行更多调查,但我认为这会满足我现在的要求。