c++ - 带有引用的对象的 STL 容器
问题描述
考虑以下代码:
class C
{
public:
C(int &a):_a(a){}
private:
int &_a;
};
由于对 _a 的引用,该对象不能作为值包含在 STL 容器中。由于此引用,无法将默认构造函数添加到此类。
有没有办法让这个对象适合 STL 容器而不更改对指针的引用?
理想情况下,我想我想使用某种 std::reference_wrapper ,但我不能,因为它本身不是默认可构造的。
解决方案
有没有办法让这个对象适合 STL 容器
当然:
std::vector<C> name_of_vector {
some_int, another_int, ...
};
请注意,隐式生成的赋值运算符的C
语义如果被重新分配,可能会产生意想不到的后果std::vector<C>
。即,赋值运算符修改引用的整数。
我强烈建议将赋值运算符定义为已删除。更好的是,完全避免使用引用成员。
理想情况下,我想我想使用某种 std::reference_wrapper
由于它的赋值语义(它重新绑定而不是修改引用的对象),这可能是一个更合理的选择。
但我不能,因为它本身不是默认可构造的。
默认可构造性不是任何标准容器的元素的要求(尽管它是某些标准容器的某些成员函数的要求,因此仅限于不使用这些)。
推荐阅读
- javascript - 如何在两个字符之间查找文本
- google-cloud-platform - Bigtable 性能基准测试
- dart - 这是否可以为 DART ONLY 项目添加二进制文件?
- linux - 如何剥离 ELF 文件中的节标题表?
- jekyll - jekyll的远程主题中应该更改哪个部分以扩大帖子的窗口大小?
- python - 玛雅蟒蛇。带有 for 循环的育儿组
- laravel - Spatie/Laravel 权限视图模板
- flutter - Flutter 检查 TextField 是否有焦点
- javascript - 类型检查运算符语句的结果
- python - 在python中出现错误,打印模式