【发布时间】:2021-11-02 21:28:23
【问题描述】:
从C++20开始,编译器可以通过operator ==() = default语法自动为用户类生成比较运算符。但是这个操作符必须只在类定义内部默认还是可以在类定义之后呢?
考虑程序:
struct A { friend bool operator==(A,A); };
bool operator==(A,A) = default;
它被 GCC 接受,但被 Clang 拒绝并出现错误:
error: equality comparison operator can only be defaulted in a class definition
演示:https://gcc.godbolt.org/z/KboK7frhb
哪个编译器在这里?
将运算符定义放在类定义之外对于将运算符仅放在一个翻译单元中很有用,例如,从而提高大程序的编译时间。
【问题讨论】:
标签: c++ language-lawyer c++20 comparison-operators