首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >构造函数:默认参数和委托参数之间的区别

构造函数:默认参数和委托参数之间的区别
EN

Stack Overflow用户
提问于 2014-09-06 06:23:36
回答 1查看 307关注 0票数 20

今天,我偶然发现了std::vector构造函数的these standard declarations

代码语言:javascript
复制
// until C++14
explicit vector( const Allocator& alloc = Allocator() );
// since C++14
vector() : vector( Allocator() ) {}
explicit vector( const Allocator& alloc );

在大多数标准容器中都可以看到这种变化。一个稍有不同的例子是std::set

代码语言:javascript
复制
// until C++14
explicit set( const Compare& comp = Compare(),
              const Allocator& alloc = Allocator() );
// since C++14
set() : set( Compare() ) {}
explicit set( const Compare& comp,
              const Allocator& alloc = Allocator() );

这两种模式之间的区别是什么,它们的(不)优点是什么?

它们是严格等价的吗-编译器是否从第一个生成类似于第二个的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-06 06:28:45

区别在于

代码语言:javascript
复制
explicit vector( const Allocator& alloc = Allocator() );

即使在使用默认参数的情况下也是explicit,而

代码语言:javascript
复制
vector() : vector( Allocator() ) {}

不是。(第一种情况下的explicit是防止Allocators隐式转换为vector所必需的。)

这意味着你可以写

代码语言:javascript
复制
std::vector<int> f() { return {}; }

代码语言:javascript
复制
std::vector<int> vec = {};

在第二种情况下,但不是第一种情况。

参见LWG issue 2193

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25694780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档