C++ 我应该使用数值限制还是C限制宏?

C++ 我应该使用数值限制还是C限制宏?,c++,c++11,numeric-limits,C++,C++11,Numeric Limits,我对SO还不熟悉,这是我的第一个问题,但我已经阅读了规则,我希望我不会违反任何规则 我最近开始学习编程,选择C++作为我的第一语言。今天我已经到了需要帮助才能做出正确决定的地步。我从第六版的C++入门文档中学习,到目前为止,作者只介绍了C宏,还没有说过一个单词,关于数字限制> 模板(至少我认为是模板)。p> P> >现在我有点迷茫,因为如果我理解正确,数字限制>强是一种现代的检查C++类型限制的方法,因为它易于扩展。此外,在C宏中,还没有像char16\t这样的C++11类型的定义 虽然搜索时

我对SO还不熟悉,这是我的第一个问题,但我已经阅读了规则,我希望我不会违反任何规则

我最近开始学习编程,选择C++作为我的第一语言。今天我已经到了需要帮助才能做出正确决定的地步。我从第六版的C++入门文档中学习,到目前为止,作者只介绍了C宏,还没有说过一个单词,关于<强>数字限制> <强>模板(至少我认为是模板)。p> <> P> >现在我有点迷茫,因为如果我理解正确,<强>数字限制>强是一种现代的检查C++类型限制的方法,因为它易于扩展。此外,在C宏中,还没有像char16\t这样的C++11类型的定义

虽然搜索时我发现的唯一的东西是,但提供了尽可能有用的答案,不幸的是,它们并没有回答我特别感兴趣的问题。而且实际上他们大多都很老了

现在,具体问题是:

基于未来对代码执行速度、安全性和实用性的需求(我不太关心简单性),使用那些旧的C宏是更好的主意,还是考虑到我提到的方面,我应该坚持数值限制


请原谅我英语中的任何错误。这不是我的母语。

虽然DBL_MAX和std::numeric_limits::MAX()都很好(而且后者很长),但当您要更改具有typedef的值表示形式时,可能不使用前者:

struct X {
   typedef double Real; // may become float
};

此外,有了模板,您必须使用std::numeric_limits。

对于大多数代码,C的宏或C++的
std::numeric_limits
都可以正常工作。在C++03中,有一个问题是
min()
max()
成员无法生成常量表达式,但这个问题可以通过C++11的
constepr
解决

这两种方法都是完全类型安全的,如果您能够测量一个程序的两个版本之间的差异,而这两个版本之间的差异仅仅在于获取类型属性的方式不同,我会感到惊讶。宏不可替代的主要区域是模板:模板实体需要固定名称,而宏的工作方式并非如此(它们在编译过程中也会在错误的时间展开)


就我个人而言,我总是使用
std::numeric_limits
,主要是因为我可以在我所有的代码中使用它,而且我可以更好地记住名称。

你的英语很好。你链接的问题中被接受的答案仍然是很好的建议。使用
数值限制
。如果您的编译器完全支持
C++11
,那么大多数
numeric\u limits
函数都是
constepr
,这增加了它们的实用性。@PeteBecker非常感谢您。我使用g++4.8.1到MinGW作为我的编译器,AFAIK主要支持C++11,所以这应该不是问题。这正是我需要的答案。老实说,我认为
std::numeric_limits
实际上更容易习惯,因为我不需要了解所有这些宏的名称。我只需要知道类型的名称,我已经习惯了。非常感谢你。