gpt4 book ai didi

c++ - 使用 const 成员分配类

转载 作者:可可西里 更新时间:2023-11-01 16:02:33 26 4
gpt4 key购买 nike

考虑以下代码:

struct s
{
const int id;

s(int _id):
id(_id)
{}
};
// ...
vector<s> v; v.push_back(s(1));

我收到“const int id”无法使用默认赋值运算符的编译器错误。

<罢工>Q1。为什么 push_back() 需要赋值运算符?
A1.因为当前的 c++ 标准是这么说的。

<罢工>Q2。我该怎么办?

  • 我不想放弃 const 说明符
  • 我要复制数据

<罢工> A2。我将使用智能指针。

Q3。我想出了一个“解决方案”,这看起来相当疯狂:

s& operator =(const s& m)
{
if(this == &m) return *this;
this->~s();
return *new(this) s(m);
}

我应该避免这种情况吗?为什么(如果是这样)? 如果对象在堆栈上,使用 placement new 是否安全?

最佳答案

C++03 要求存储在容器中的元素是CopyConstructibleAssignable(参见§23.1)。因此,实现可以决定使用他们认为合适的复制构造和赋值。这些约束在 C++11 中放宽了。明确地,push_back 操作要求是类型是CopyInsertable 到 vector 中(参见§23.2.3 序列容器)

此外,C++11 容器可以在插入操作和 do on 中使用移动语义。

关于c++ - 使用 const 成员分配类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com