gpt4 book ai didi

C++ 语法 : default and delete modifiers

转载 作者:可可西里 更新时间:2023-11-01 16:36:25 25 4
gpt4 key购买 nike

今天我偶然发现了这样一个代码片段:

class A 
{
A() = default;
A (const A&) = delete;

...
}

我从未见过deletedefault 关键字。它们是 C++11 标准的一部分吗?它们的用途是什么?

最佳答案

现在可以默认删除特殊成员函数。

已删除的成员函数仍然参与重载决议,但如果它被选中,则程序格式错误并且编译停止并提供有用的诊断。这是编写不可复制类之类内容的正确方法,并且用户会收到正确的错误消息。

默认成员函数“做它应该做的”,例如默认的默认构造函数默认初始化所有基类和成员,并且主体为空;默认复制构造函数复制每个基对象和成员对象,默认赋值运算符分配每个基对象和成员对象。如果不允许任何这些操作(例如,您有引用成员),则默认成员函数被定义为已删除。

请注意,您的第一个声明定义 A() = default; 使构造函数 A::A() 用户声明 但是不是用户定义的;这对于 A 的分类很重要,例如是否是POD。 (请注意,这不同于struct A { A(); }; A::A() = default;用户定义的。)

另一个很好的结果是对隐式生成的东西的澄清:如果你根本不自己编写某些函数(比如复制构造函数),那么一个函数将被隐式声明给你。当隐式声明的对象被 ODR 使用时,它会被隐式定义为默认值,因此如果不可能(例如,如果该类具有不可复制的成员),它实际上会被隐式定义已删除。因此,这通常是传播不可复制性和不可分配性等事物的一种巧妙方式,至少在语言和随之而来的诊断方面是这样。

关于C++ 语法 : default and delete modifiers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16770492/

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