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