将特殊方法标记为=delete
时,该方法的限定符起作用吗?换句话说就是:
inline constexpr myClass(const myClass&) noexcept = delete;
和
myClass(const myClass&) = 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;
,以确保复制构造函数已被删除。这应该是有意义的——限定符不是一个新的声明,它们只是限定一个现有的声明。