C++ 限定符on=delete方法

C++ 限定符on=delete方法,c++,methods,qualifiers,C++,Methods,Qualifiers,当将特殊方法标记为=delete时,该方法的限定符是否起作用? 换言之: inline constexpr myClass(const myClass&) noexcept = delete; 及 等价物?通常情况下,只需尝试一下并询问编译器: class myClass { inline constexpr myClass(const myClass&) noexcept = delete; myClass(const myClass&) = dele

当将特殊方法标记为
=delete
时,该方法的限定符是否起作用? 换言之:

inline constexpr myClass(const myClass&) noexcept = delete;


等价物?

通常情况下,只需尝试一下并询问编译器:

class myClass {
    inline constexpr myClass(const myClass&) noexcept = delete;
    myClass(const myClass&) = delete;
};

int main() {
    return 0;
}


1 bla.cpp|4 col 5 error| ‘myClass::myClass(const myClass&)’ cannot be overloaded with ‘constexpr myClass::myClass(const myClass&)’
2 bla.cpp|3 col 22 error| note: previous declaration ‘constexpr myClass::myClass(const myClass&)
是的,它们是相同的函数。你可以试试

myClass x;
auto y = x;

使用每个来确保已删除复制构造函数。这应该是有意义的-限定符不是一个新的声明,它们只是限定了一个现有的声明。

因此,事实上(为了清楚起见)最好只写第二个选项(我想是
myClass(const myClass&)=delete;
)=a.D,这是一个观点,但我同意,对我来说是这样。因此,当声明方法
=default
时,以类似的方式给出的限定词没有影响?@a.D.确实如此。你不能用不同的限定符两次声明同一个函数或方法。@A.D这是一个不同的问题,但是是的。更难检查的是,在我的测试程序中声明一个
constexpr
default构造函数、copy构造函数和两个初始化语句。错过一个,编译器就会抱怨。同样的交易——编译器知道得最好。
myClass x;
auto y = x;