【问题标题】:Can comparison operator be defaulted outside of class definition in C++20?比较运算符可以在 C++20 中的类定义之外默认吗?
【发布时间】: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


    【解决方案1】:

    P2085R0 删除了默认比较运算符在第一个声明中默认的要求。 Clang 目前不支持这个提议:

    另见https://reviews.llvm.org/D103929

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 2021-02-05
      • 2023-03-30
      • 2010-10-06
      • 1970-01-01
      • 2020-03-05
      • 2011-08-03
      相关资源
      最近更新 更多