为什么不可能显式地默认具有volatile参数的副本构造函数?

奥利夫

我找不到标准中指出禁止使用volatile&or或const volatile&参数显式默认copy-constructor和copy-assignment的地方,如下所示:

struct A{
   A(const volatile A&) =default; // fails to compile on (all) compilers
   };

在[dcl.fct.def.default]中没有这样的限制,而[class.copy]指定A(const volatile A&)是副本构造函数。

注意:我只是在标准文本中寻找指定此行为的位置。

讲故事的人-Unslander Monica

您位于正确的部分,但忽略了一些关键的项目符号。

[dcl.fct.def.default] / 1

形式的函数定义:

...

被称为显式默认定义。明确默认的功能应

  • 具有相同的声明函数类型(除了可能不同的ref限定符,以及对于复制构造函数或复制赋值运算符而言,参数类型可以是“对非常量T的引用”,其中T是成员函数的class,就好像它已隐式声明一样,并且

[class.copy.ctor] / 7

X类的隐式声明的副本构造函数将具有以下形式:

X::X(const X&)

如果类类型M(或其数组)的每个可能构造的子对象都有一个副本构造函数,其第一个参数的类型为const M&或const volatile M&。119否则,隐式声明的副本构造函数将具有以下形式:

X::X(X&)

...
119)这意味着隐式声明的副本构造函数的引用参数无法绑定到易失性左值;

总结以上内容后,您可以使用以下两个方法来明确默认副本的默认值:

struct A {
   A(const A&) = default;
};

struct B {
   B(B&) = default;
};

当标准说的A(const volatile A&)是复制构造函数时。这意味着具有此类参数用户提供的c'tor可以是类copy c'tor。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

为什么不可能从原型更改构造函数?

来自分类Java

如果父类具有带参数的构造函数,为什么默认构造函数是必需的?

来自分类Java

为什么将显式类型参数赋予非泛型方法或构造函数?

来自分类Dev

volatile struct = struct不可能,为什么?

来自分类Dev

为什么显式删除构造函数?

来自分类Dev

为什么带有无符号long long参数的std :: bitset构造函数未标记为显式?

来自分类Dev

具有默认参数的Unity构造函数

来自分类Dev

显式默认的构造函数做什么?

来自分类Dev

为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

来自分类Dev

为什么片段具有默认构造函数?

来自分类Dev

2个默认的副本构造函数:有可能吗?

来自分类Dev

有什么方法可以无序使用默认参数,而不必在Python函数中显式传递它们?

来自分类Dev

为什么reverse_iterator具有默认构造函数?

来自分类Dev

具有成员初始化列表的显式副本构造函数中的空值

来自分类Dev

为什么在没有显式默认构造函数的情况下不能将包含另一个结构作为成员包装的结构的编译?

来自分类Dev

为什么std :: in_place_t的构造函数默认且显式?

来自分类Dev

显式副本构造函数的行为

来自分类Dev

没有显式定义的构造函数时,为什么可以创建对象?

来自分类Dev

为什么clang使用libstdc ++删除包含std :: optional的类型上的显式默认构造函数?

来自分类Dev

为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

来自分类Dev

为什么显式默认的构造函数在VS2019中给出“找不到函数定义”警告?

来自分类Dev

为什么双参数构造函数以显式关键字开头?

来自分类Dev

为什么不可能指定Scala varargs参数的默认值?

来自分类Dev

为什么C ++和Java中的构造函数调用需要显式类型参数?

来自分类Dev

具有默认构造函数的VPTR与显式声明的构造函数

来自分类Dev

为什么带有用户声明的析构函数的类具有隐式默认构造函数?

来自分类Dev

具有所有默认参数的显式构造函数不能从同一类的另一个构造函数调用

来自分类Dev

在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

来自分类Dev

为什么不可能在特征中定义此构造函数?

Related 相关文章

  1. 1

    为什么不可能从原型更改构造函数?

  2. 2

    如果父类具有带参数的构造函数,为什么默认构造函数是必需的?

  3. 3

    为什么将显式类型参数赋予非泛型方法或构造函数?

  4. 4

    volatile struct = struct不可能,为什么?

  5. 5

    为什么显式删除构造函数?

  6. 6

    为什么带有无符号long long参数的std :: bitset构造函数未标记为显式?

  7. 7

    具有默认参数的Unity构造函数

  8. 8

    显式默认的构造函数做什么?

  9. 9

    为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

  10. 10

    为什么片段具有默认构造函数?

  11. 11

    2个默认的副本构造函数:有可能吗?

  12. 12

    有什么方法可以无序使用默认参数,而不必在Python函数中显式传递它们?

  13. 13

    为什么reverse_iterator具有默认构造函数?

  14. 14

    具有成员初始化列表的显式副本构造函数中的空值

  15. 15

    为什么在没有显式默认构造函数的情况下不能将包含另一个结构作为成员包装的结构的编译?

  16. 16

    为什么std :: in_place_t的构造函数默认且显式?

  17. 17

    显式副本构造函数的行为

  18. 18

    没有显式定义的构造函数时,为什么可以创建对象?

  19. 19

    为什么clang使用libstdc ++删除包含std :: optional的类型上的显式默认构造函数?

  20. 20

    为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

  21. 21

    为什么显式默认的构造函数在VS2019中给出“找不到函数定义”警告?

  22. 22

    为什么双参数构造函数以显式关键字开头?

  23. 23

    为什么不可能指定Scala varargs参数的默认值?

  24. 24

    为什么C ++和Java中的构造函数调用需要显式类型参数?

  25. 25

    具有默认构造函数的VPTR与显式声明的构造函数

  26. 26

    为什么带有用户声明的析构函数的类具有隐式默认构造函数?

  27. 27

    具有所有默认参数的显式构造函数不能从同一类的另一个构造函数调用

  28. 28

    在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

  29. 29

    为什么不可能在特征中定义此构造函数?

热门标签

归档