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;