为了账号安全,请及时绑定邮箱和手机立即绑定

类的函数声明后的“默认”是什么意思?

类的函数声明后的“默认”是什么意思?

C++
蝴蝶刀刀 2019-11-23 11:12:50
我已经看到default在类中的函数声明旁边使用过。它有什么作用?class C {  C(const C&) = default;  C(C&&) = default;  C& operator=(const C&) & = default;  C& operator=(C&&) & = default;  virtual ~C() { }};
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

这是C ++ 11的新功能。


这意味着您要使用编译器生成的该函数的版本,因此您无需指定主体。


您还可以= delete用于指定您不希望编译器自动生成该函数。


随着移动构造函数和移动赋值运算符的引入,生成自动版本的构造函数,析构函数和赋值运算符的规则变得相当复杂。使用= default和= delete使事情变得容易,因为您无需记住规则:您只需说出要发生的事情即可。

查看完整回答
反对 回复 2019-11-23
?
侃侃无极

TA贡献2051条经验 获得超10个赞

这是C ++ 0x的一项新功能,可告诉编译器创建相应构造函数或赋值运算符的默认版本,即仅对每个成员执行复制或移动动作的版本。这很有用,因为默认情况下并非总是生成move构造函数(例如,如果您有自定义析构函数),这与copy构造函数(以及类似的赋值方法)不同,但是如果没有什么不平凡的编写,最好让编译器会处理它,而不是每次都自己拼出来。

还要注意,如果提供任何其他非默认构造函数,则不会生成默认构造函数。如果仍然需要默认的构造函数,则可以使用此语法来使编译器合而为一。

作为另一个用例,在某些情况下不会隐式生成副本构造函数(例如,如果您提供自定义的移动构造函数)。如果仍然需要默认版本,则可以使用此语法进行请求。

有关详细信息,请参见标准的12.8节。


查看完整回答
反对 回复 2019-11-23
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

它是C ++ 11中的新功能,请参见此处。如果您定义了一个构造函数,但想对其他构造函数使用默认值,则它会非常有用。在C ++ 11之前的版本中,您必须定义所有构造函数,即使它们等同于默认构造函数。


还要注意,在某些情况下,不可能提供用户定义的默认构造函数,该构造函数在默认和值初始化下的行为与编译器综合的行为相同。default使您能够恢复该行为。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 571 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信