可以在 C++20 中的 class 定义之外默认比较运算符吗?
Can comparison operator be defaulted outside of class definition in C++20?
从C++20开始,编译器可以通过operator ==() = default
语法为用户classes自动生成比较运算符。但是这个运算符必须仅在 class 定义内默认还是可以在 class 定义之后?
考虑程序:
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
这里是哪个编译器?
将运算符定义放在 class 定义之外对于仅在一个翻译单元中使用运算符可能很有用,例如,从而缩短大程序的编译时间。
P2085R0 removed the requirement on the defaulted comparison operator to be defaulted on the first declaration. Clang currently doesn't support this proposal:
从C++20开始,编译器可以通过operator ==() = default
语法为用户classes自动生成比较运算符。但是这个运算符必须仅在 class 定义内默认还是可以在 class 定义之后?
考虑程序:
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
这里是哪个编译器?
将运算符定义放在 class 定义之外对于仅在一个翻译单元中使用运算符可能很有用,例如,从而缩短大程序的编译时间。
P2085R0 removed the requirement on the defaulted comparison operator to be defaulted on the first declaration. Clang currently doesn't support this proposal: