如何在没有 operator=() 的情况下为 const 成员 push

编程入门 行业动态 更新时间:2024-10-10 03:32:39
本文介绍了如何在没有 operator=() 的情况下为 const 成员 push_back?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

如何在不使用 operator=() 的情况下将 push_back() 推到 C++ std::vector 中,默认定义违反了 const 成员?

How to push_back() to a C++ std::vector without using operator=() for which the default definition violates having const members?

struct Item { Item(int value) : _value(value) { } const char _value; } vector<Item> items; items.push_back(Item(3));

我想保留 _value 常量,因为它在构造对象后不应该改变,所以问题是如何在不调用 operator=() 的情况下用元素初始化我的向量?

I'd like to keep the _value const since it should not change after the object is constructed, so the question is how do I initialize my vector with elements without invoking operator=()?

这是 g++ v3.4.6 给我的基本错误:

Here is the basic error the g++ v3.4.6 is giving me:

.../3.4.6/bits/vector.tcc: In member function `Item& Item::operator=(const Item&)': .../3.4.6/bits/vector.tcc:238: instantiated from `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Item, _Alloc = std::allocator<Item>]' .../3.4.6/bits/stl_vector.h:564: instantiated from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Item, _Alloc = std::allocator<Item>]' item.cpp:170: instantiated from here .../3.4.6/bits/vector.tcc:238: error: non-static const member `const char Item::_value', can't use default assignment operator

推荐答案

对于 std::vector,元素必须是可分配的.您输入的内容不可分配.的一个实现.std::vector<T> 可以避免坚持这一要求,但这会造成损害,因为生成的代码不可移植.

For std::vector<T> the elements are required to be Assignable. You type is not Assignable. An implementation of. std::vector<T> could avoid insisting on this requirement but this would be a disservice as the resulting code wouldn't be portable.

您可以使用 std::list 代替或更改您键入的定义.例如,您可以创建一个仅读取值而不读取 setter 的访问器.当然,赋值会改变值.因此,选择是允许这种更改还是允许将对象放入容器中.你不会两者都得到.

You can use a std::list<T> instead or change the definition of you type. For example you can create an accessor to only read the value but no setter. Of course, assignment would change the value. The choice thus is to either allow this change or allow putting the objects into a container. You won't get both.

更多推荐

如何在没有 operator=() 的情况下为 const 成员 push

本文发布于:2023-10-29 00:30:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1538202.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:情况下   成员   如何在   push   operator

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!