【问题标题】:Is there a gcc extension for c++ short-circuiting?是否有用于 c++ 短路的 gcc 扩展?
【发布时间】: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


【解决方案1】:

答案是“不”。所有 gcc C++ 扩展都记录在这里:https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html。那里没有列出以您描述的方式工作的扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多