gpt4 book ai didi

c++ - 在显式实例化 vector 时,someType 默认构造函数用于什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:33 24 4
gpt4 key购买 nike

这是C++ Primer 5th Edition中的练习:

Exercise 16.26: Assuming NoDefault is a class that does not have a default constructor, can we explicitly instantiate vector<NoDefault>? If not, why not? P.677

我知道如果类 NoDefault 不能编译没有默认构造函数,但无法解释原因。谁能告诉我在显式实例化 template class std::vector<NoDefault> 时如何使用默认构造函数?

最佳答案

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 中显式实例化(我想分配器类型也需要是默认可构造的)。但我可能错过了什么。鉴于它引入了这种向后不兼容,进行这种更改似乎有点奇怪。如果您想更深入地了解为什么这个不再有效,而不是仅仅为什么这个有效:-)

关于c++ - 在显式实例化 vector<someType> 时,someType 默认构造函数用于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525169/

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