将具有 const 成员的结构推入 c++11 之前的 std::vector

问题描述 投票:0回答:1

我被困在一个旧的编译器中,它既不支持 std::move 也不支持其他 c++11 功能,并且有以下场景:

struct MyStruct
{
    const int32_t value1;
    const int32_t value2;

    MyStruct(int32_t value1, int32_t value2);    //Initializing constructor.
}

现在我有一个 std::vector,它采用上述结构,但我的编译器善意地通知我:

non-static const member ... can't use default assignment operator

这反过来表明,出于某种原因, std::vector 确实不使用复制构造函数,而这将是正确的做法。

知道如何解决这个问题吗?

因为

MyStruct &MyStruct::operator =(const MyStruct &other)
{
    if (&other != this)
        *this = MyStruct(other);
    return *this;
}

感觉这是一种非常容易出现错误的解决问题的方法。 达到同一目的的另一种想法如下所示:

MyStruct &MyStruct::operator =(const MyStruct &other)
{
    *const_cast<int32_t *>(&value1) = other.value1;
    *const_cast<int32_t *>(&value2) = other.value2;
    return *this;
}

我真的不确定,我不太喜欢哪种方法。

c++ c++03
1个回答
0
投票

我已获悉,C++11 之前的 std::vector 元素需要“可复制分配”(如 https://en.cppreference.com/w/cpp/container/vector 中所述) .

为了解决我的问题,我最终使用了不同的容器:std::list(只需要复制可构造元素)。

感谢那些帮助我绕过墙壁而不是试图突破的人。

© www.soinside.com 2019 - 2024. All rights reserved.