从标准的角度来看,我应该使用 C++<limits>
标头中的以下内容吗?
UCHAR_MAX
哪个是 c 实现,
std::numeric_limits<unsigned char>::max()
哪个是 C++ 实现。
结果在两个版本之间是等效的,但是在这种情况下,我应该根据某些标准还是根据可读性和可移植性来选择实现。请注意,此实现必须是跨平台兼容的。我正在编写 C++ 代码。
如果您希望代码能够编译为 C,那么您几乎需要使用<limits.h>
. 如果您正在编写 C++,那么使用 C++<limits>
标头可能会更好。后者使您可以编写可在模板中工作的代码,而这些模板实际上不能与 C 标头复制:
template <class T>
class mytemplate {
T x;
void somefunc() { x = std::numeric_limits<T>::max(); } // or whatever...
};
当您使用 C 时,std::numeric_limits
显然不可用。
在 C++ 中,这取决于您想要做什么 -std::numeric_limits<T>::max()
不是当前 C++ 标准的常量表达式。
在这些情况下,C-ish 宏的替代方法是使用类似 Boost.Integers integer traits const_min
/的东西const_max
,它也适用于模板化上下文。
知道你用什么语言写作,然后用那种语言写作。如果您正在编写 C++,请使用标准的 C++ 做事方式。
标准 C++ 通常是跨平台兼容的(有例外,例如export
,但export
无论如何都已从 C++ 标准中删除)。坚持使用 C++ 结构通常比在 C 和 C++ 结构之间切换更易读。
您应该使用 <limits> 来保持一致。
在 windows 平台上,如果包含 <windows.h>,您可能还想
#define NOMINMAX
避免与 min 和 max 的名称冲突。