为何多数默认运算符无法使用auto作为占位符返回类型?
C++20默认比较运算符的返回类型限制疑问
C++20支持默认比较运算符,其中三路比较运算符<=>允许用auto推导返回类型,但其他运算符却存在严格限制——比如operator==和赋值运算符就无法使用auto推导返回类型:
struct S { friend auto operator<=>(const S&, const S&) = default; // 合法 friend auto operator==(const S&, const S&) = default; // 错误:返回类型必须是bool auto& operator=(const S&) = default; // 错误:返回类型必须是S& };
这种限制看起来有些随意,毕竟对于operator==来说,auto能合理推导的返回类型只有bool。那么这种限制是否存在合理的设计原因?
这是一则wiki式问答,目的是让开发者关注这一限制性的语言设计,以及正在推进的、旨在解决该问题的C++26提案。
内容的提问来源于stack exchange,提问作者Jan Schultke
相关产品推荐
相关产品推荐

