ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 对于const成员,如何在没有operator =()的情况下使用push_back?

2019-09-28 03:06:44  阅读:292  来源: 互联网

标签:c const gcc assignment-operator stdvector


如何将push_back()转换为C std :: vector而不使用默认定义违反const成员的operator =()?

struct Item {
  Item(int value)
    : _value(value) {
  }
  const char _value;
}

vector<Item> items;

items.push_back(Item(3));

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

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

.../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< T>元素必须是可分配的.您键入的内容不是可分配的.一个实现.的std ::矢量< T&GT可以避免坚持这个要求,但这将是一个损害,因为结果代码将不可移植. 您可以使用std :: list< T>改为或改变你输入的定义.例如,您可以创建一个只读取值但不读取setter的访问器.当然,任务会改变价值.因此,选择是允许这种改变还是允许将对象放入容器中.你不会两者都得到.

标签:c,const,gcc,assignment-operator,stdvector
来源: https://codeday.me/bug/20190928/1825508.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有