1

从标准的角度来看,我应该使用 C++<limits>标头中的以下内容吗?

UCHAR_MAX哪个是 c 实现, std::numeric_limits<unsigned char>::max()哪个是 C++ 实现。

结果在两个版本之间是等效的,但是在这种情况下,我应该根据某些标准还是根据可读性和可移植性来选择实现。请注意,此实现必须是跨平台兼容的。我正在编写 C++ 代码。

4

4 回答 4

9

如果您希望代码能够编译为 C,那么您几乎需要使用<limits.h>. 如果您正在编写 C++,那么使用 C++<limits>标头可能会更好。后者使您可以编写可在模板中工作的代码,而这些模板实际上不能与 C 标头复制:

template <class T>
class mytemplate { 
    T x;
    void somefunc() { x = std::numeric_limits<T>::max(); } // or whatever...
};
于 2010-06-23T19:21:58.687 回答
0

当您使用 C 时,std::numeric_limits显然不可用。

在 C++ 中,这取决于您想要做什么 -std::numeric_limits<T>::max()不是当前 C++ 标准的常量表达式。
在这些情况下,C-ish 宏的替代方法是使用类似 Boost.Integers integer traits const_min /的东西const_max,它也适用于模板化上下文。

于 2010-06-23T19:27:15.903 回答
0

知道你用什么语言写作,然后用那种语言写作。如果您正在编写 C++,请使用标准的 C++ 做事方式。

标准 C++ 通常是跨平台兼容的(有例外,例如export,但export无论如何都已从 C++ 标准中删除)。坚持使用 C++ 结构通常比在 C 和 C++ 结构之间切换更易读。

于 2010-06-23T19:29:07.327 回答
0

您应该使用 <limits> 来保持一致。

在 windows 平台上,如果包含 <windows.h>,您可能还想

#define NOMINMAX

避免与 min 和 max 的名称冲突。

于 2010-06-23T19:36:27.887 回答