我是SO的新手,这是我的第一个问题,但我已经阅读了规则,我希望我不会破坏它们。
我最近开始学习编程,并选择C ++作为我的第一语言。今天我已经到了需要帮助才能做出正确决定的地步。我正在学习第六版C ++ Primer Plus,到目前为止,作者只介绍了C宏,并且没有说过关于 numeric_limits 模板的一个单词(至少我认为它是一个模板)由于我的好奇心,我从互联网上学到了东西。
所以,现在我有点迷失了,因为如果我理解正确 numeric_limits 是一种检查C ++类型限制的现代方法,因为它易于扩展。此外,C宏中的AFAIK没有像char16_t这样的C ++ 11类型的定义。
虽然只搜索我找到的内容that question,但提供的答案虽然有用,但不幸的是他们没有回答对我特别感兴趣的内容。实际上他们大多都很老了。
现在,具体问题:
基于对代码执行速度的需求,未来的安全性和实用性(我不太关心简单性)是否更好的想法使用那些旧的C宏或者我应该坚持 numeric_limits 强烈>考虑到我提到的方面?
请原谅我英语中的任何错误。这不是我的母语。
答案 0 :(得分:7)
对于大多数代码,C的宏或C ++的std::numeric_limits
都可以正常工作。在C ++ 03中,有一个问题是min()
和max()
成员不能产生常量表达式,但这个问题是用C ++ 11的constexpr
来解决的。
这两种方法都是完全类型安全的,如果你能测量一个程序的两个版本之间的区别,我只会对获得类型属性的方式有所不同,我会感到惊讶。宏不可替代的主要区域是模板:模板实体需要一个固定的名称,而宏不能像那样工作(在编译期间它们也会在错误的时间扩展)。
就个人而言,我总是使用std::numeric_limits<T>
,主要是因为我可以在我的所有代码中使用它,我可以更好地记住这些名称。
答案 1 :(得分:1)
虽然DBL_MAX和std :: numeric_limits :: max()都非常好(除了后者很烦),当你想要改变一个有typedef的值表示时,你可能不会使用前者:
struct X {
typedef double Real; // may become float
};
此外,拥有模板必须使用std :: numeric_limits。