【发布时间】:2011-07-09 03:35:21
【问题描述】:
浏览这个 C++ BigInt 库并找到 BigInt.cpp 文件。顶部有一条关于兼容性的评论:
这个类是为 g++ 编译器编写的,并使用了一些 g++ 扩展(如“long double”和 ">?=" 运算符)。
>?= 运算符是做什么的?我在其他任何地方都找不到对它的引用。
【问题讨论】:
-
long double 不是 g++ 扩展...
浏览这个 C++ BigInt 库并找到 BigInt.cpp 文件。顶部有一条关于兼容性的评论:
这个类是为 g++ 编译器编写的,并使用了一些 g++ 扩展(如“long double”和 ">?=" 运算符)。
>?= 运算符是做什么的?我在其他任何地方都找不到对它的引用。
【问题讨论】:
这是 GCC 4.2 及更高版本中删除的 GCC 扩展。
a >?= b 的等价物是a = max(a,b);
还有一个非常相似的运算符a <?= b,意思和a = min(a, b);一样。
【讨论】:
见C extension: <? and >? operators
这是 max-then-assign 运算符:取左侧和右侧中较大的一个,然后将其塞回左侧。
它已从 g++ 中删除,应替换为 max(或 min 替换为 <?=)
【讨论】:
This page 描述 >? 是“最大值”运算符,它返回两个数字参数中的最大值。我猜>?= 将其与赋值相结合,如果右侧值较大,大概是通过分配给左侧操作数。
【讨论】:
>? 用作最大值运算符是有道理的,因为可以像这样在常规 C++ 中计算最大值:max = lhs > rhs ? lhs : rhs。
__attribute__。但当然,有些扩展比其他扩展更令人讨厌。
>?= 真的很恶心!