=delete 方法上的限定符

Qualifiers on =delete methods

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

每个确保复制构造函数已被删除。这应该是有道理的 - 限定符不是新声明,它们只是限定现有声明。