Oli*_*liv 5 c++ volatile copy-constructor language-lawyer
我无法找到标准中的哪个地方声明禁止使用volatile&或const volatile&参数显式默认复制构造函数和复制赋值,如下所示:
struct A{
A(const volatile A&) =default; // fails to compile on (all) compilers
};
Run Code Online (Sandbox Code Playgroud)
在[dcl.fct.def.default]中没有这样的限制,而[class.copy]指定它A(const volatile A&)是一个复制构造函数.
注意:我只是在标准文本中查找指定此行为的位置.
你在正确的部分,但俯视一些关键的子弹.
表单的函数定义:
...
被称为明确默认的定义.明确默认的函数应该
- 具有相同的声明函数类型(可能不同的ref限定符除外,在复制构造函数或复制赋值运算符的情况下,参数类型可以是"引用非const T",其中T是成员函数的类)就像它已被隐式声明一样,并且
类X的隐式声明的复制构造函数将具有该表单
Run Code Online (Sandbox Code Playgroud)X::X(const X&)如果类型M(或其数组)的每个可能构造的子对象具有复制构造函数,其第一个参数是const M&或const volatile M&.119否则,隐式声明的复制构造函数将具有该表单
Run Code Online (Sandbox Code Playgroud)X::X(X&)...
119)这意味着隐式声明的复制构造函数的引用参数不能绑定到volatile lvalue;
如果总结上述内容,那么明确默认复制文件的唯一两个选项是:
struct A {
A(const A&) = default;
};
struct B {
B(B&) = default;
};
Run Code Online (Sandbox Code Playgroud)
当标准说A(const volatile A&)是复制构造函数时.这意味着具有这种参数的用户提供的 c'tor可以是复制c'tor类.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |