【发布时间】:2016-04-22 08:09:00
【问题描述】:
我想在自定义类上重载 operator&& 和 operator||,并且我希望重载的运算符遵守其本地对应项的短路行为。
我知道在 c++ 语言中没有这样的机制,但我想知道 gcc 是否可能有某种扩展可以使这成为可能。我知道这样的扩展会导致 gcc 违反官方 c++ 标准,但我在 gcc documentation 上看到了免责声明,上面写着:“默认情况下,GCC 还提供了一些对 C++ 语言的额外扩展,这些扩展在极少数情况下与 C++ 标准冲突”,所以问起来并不奇怪。
如果有根本原因导致这种扩展根本无法工作(即使在理论上),那么出于教育目的也很高兴知道。在我看来,short_circuit_inline 关键字可以用作inline 的直接替代品,具有明确的含义和简单的实现,但也许我错了。
对于它的价值,我目前有一个宏解决方法,AND(x,y,...,z),它会为我的自定义类的实例短路x && y && ... && z。我对操作员的渴望在某种程度上只是为了美观。
【问题讨论】:
-
运营商将如何工作?他们不能接受两个论点,因为您不知道是否应该评估第二个论点。作为替代方案,为什么不直接提供到
bool的显式转换并使用普通运算符? -
expression templates 适合您吗?
-
@AlanStokes 我想你用 2 个参数定义运算符,用我假设的 short_circuit_inline 关键字装饰。然后,编译器可以用 if-else 代码段内联替换该运算符的所有调用,其中一个变量对应于仅在 else-branch 中声明的第二个参数。
-
另外,关于转换为 bool 和使用表达式模板的建议 - 它们不适合我的上下文,但需要一些努力来解释原因。
-
你的宏实际上做了什么?
标签: c++ gcc short-circuiting