C++ 11引入了一个新的构造函数,vector(size_type n)并且"显然"构造函数无法实例化,除非它value_type是默认构造的.它是vector(size_type n, const T & = T(), const Allocator& alloc = Allocator())在C++ 03中,但是它们将它改为两个独立的构造函数.做了类似的改变resize().
在GCC中,据我所知,根据标准:vector模板至少可以隐式实例化,而元素不是默认构造的.隐式模板类实例化仅实例化您使用的成员函数.
在C++ 03中,只有默认参数使用默认构造.您可以显式实例化模板,但如果不为该参数提供值,则无法调用这些函数.
所以我很确定更改是阻止vector<NoDefault>在C++ 11中显式实例化的(并且我认为分配器类型也需要默认构造).但我可能错过了一些东西.鉴于它引入了这种向后的不兼容性,做出这种改变似乎有点奇怪.如果你想要一个更深层次的原因,为什么这个不再起作用,而不仅仅是为什么这不起作用,那么某个地方的提案可能是合理的:-)
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |