代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

C分机:<?>?算子

  •  37
  • Matt Joiner  · 技术社区  · 15 年前

    我发现在某个时刻 <? >? GCC中的操作员。我如何在GCC4.5下使用这些?是否已移除,如果移除,何时移除?

    Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
    cpfs.c:473: error: expected expression before ‘?’ token
    
    2 回复  |  直到 9 年前
        1
  •  38
  •   Barry    10 年前

    近期手册 say :

    G++最小和最大运算符(__ <? _和_ >? _)及其化合物形式(_ <?= _)和_ >?= _)已被弃用,现在已从G++中删除。使用这些运算符的代码应该修改为使用 std::min std::max 相反。

    对过去文档的快速搜索似乎表明它们在4.0版(3.4.6版中包含了它们,4.0.4版中没有)被删除。

        2
  •  8
  •   paxdiablo    9 年前

    的早期迭代 g++ ( c编译器)使用这些运算符为您提供最小值或最大值,但它们长期以来一直被弃用以支持 std::min std::max .

    基本上,它们等同于 没有 双重评价的可能性 a b ):

    a <? b       -->       (a < b) ? a : b
    a >? b       -->       (a > b) ? a : b
    

    在替换它们方面(你真的 应该 替换它们),您可以使用如下内容:

    Offset block_count = cpfs->geo.block_size - block_offset;
    if (block_count > count) block_count = count;
    

    或等效物使用 性病::分钟 .

    我不太喜欢使用C/C++“扩展”(特别是那些已经被禁止和/或删除的扩展),因为它们将我绑定到语言的特定实现。

    如果有完全足够的标准方法可用,则不应使用非标准扩展。