=delete方法上的限定符



将特殊方法标记为=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;

,以确保复制构造函数已被删除。这应该是有意义的——限定符不是一个新的声明,它们只是限定一个现有的声明。

最新更新