C++ 为什么我能';t在'std::initializer_列表中使用引用类型`
当我尝试为包含引用的成员使用初始值设定项列表时,会出现以下错误:C++ 为什么我能';t在'std::initializer_列表中使用引用类型`,c++,oop,stl,initializer-list,C++,Oop,Stl,Initializer List,当我尝试为包含引用的成员使用初始值设定项列表时,会出现以下错误: no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’ [编辑以删除虚假示例]尽管标准中没有明确规定,但尝试使用标准库容器存储非对象类型应视为未定义行为。参见[容器.要求.概述] p1:“容器是存储其他对象的对象…” p4:“…X表示包含T类型对象的容
no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’
[编辑以删除虚假示例]尽管标准中没有明确规定,但尝试使用标准库容器存储非对象类型应视为未定义行为。参见[容器.要求.概述] p1:“容器是存储其他对象的对象…” p4:“…
X
表示包含T
类型对象的容器类”
等等。谢谢大家!!!我现在已经确定了这个解决方案:
std::array<const std::reference_wrapper<const Exp>, 2> ae{a1,a2};
std::数组ae{a1,a2};
我需要进行更多的调查,但我认为这将满足我目前的需求。问题不在于初始值设定项列表。问题是你不能有一个参考向量。很有趣,非常感谢!我会读更多。你应该用什么作为一个参考容器?事实上,你似乎也不能把一个const放在一个容器里,呃,我是C++的一个完全的新手,15年后没有接触它!如果您想在容器中使用引用,请使用
std::reference\u wrapper
。感谢您的引用!但是,标准库有std::reference_wrapper,它专门用于在STL或其他容器中存储引用。@Nullrelation:reference_wrapper
并不是专门为此目的设计的(它允许绑定表达式捕获引用),但它们可以用于此目的。
gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413
std::array<const std::reference_wrapper<const Exp>, 2> ae{a1,a2};