GNU C++无法创建常量自定义类实例的向量

Vit*_*lii 3 c++ gcc vector visual-c++

我有一个非常简单的演示程序,可以很好地编译Microsoft Visual C++:

#include <cstdio>
#include <vector>
#include <string>

using namespace std;

class String
    :public wstring
{
public:
    String(void)
    {
    }

    String(const String &other)
        : wstring(other)
    {
    }
};

int main(void)
{
    vector<const String> v;
    v.push_back(String());
    printf("Hello, World!");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它创建常量字符串的向量.但是,在GNU C++ 4.8.2中,它提供了许多错误,试图说不可能创建常量String对象的向量.当我替换vector<const String>vector<String>,它编译.这种GNU C++行为的原因是什么?

4pi*_*ie0 5

std::vector在内存管理方面以特定方式处理您的类的实例.它对数据执行的一些操作需要复制构造函数和赋值运算符或noexcept移动构造函数/赋值运算符.GCC非常正确,不能编译你没有任何这些的例子.const T不能是一个有效的类型std::vector.