2

考虑以下代码:

struct A {
};
struct B {
    A a;
    bool operator == (const B& other) const = default;
};

clang 给出了一个很好的警告:

警告:显式默认的相等比较运算符被隐式删除 [-Wdefaulted-function-deleted] bool operator == (const B& other) const = default;

但我想知道为什么这个代码甚至被标准接受。我假设如果有人operator ==在他的非模板结构/类中默认了,他的意图是永远不会被删除operator ==

但这是具有一百万个极端情况的 C++,因此可能有充分的理由。也许不是特殊情况模板?

但是clang足够聪明,不会对这段代码发出警告......

struct A {
};

template<typename T>
struct TS{
    T t;
    bool operator == (const TS& other) const = default;
};
int main() {
    TS<int> ti;
}

...所以理论上标准可以做同样的事情。

4

1 回答 1

3

在模板中,您可能想要==它是否存在,否则不存在。

相同的技术用于复制/移动/分配特殊成员函数;=default;也可以删除成员函数。

于 2021-02-04T18:50:26.817 回答