- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 SO 的新手,这是我的第一个问题,但我已经阅读了规则,希望我不会违反任何规则。
我最近开始学习编程,并选择了 C++ 作为我的第一语言。今天我已经到了需要帮助才能做出正确决定的地步。我正在学习第 6 版的 C++ Primer Plus,到目前为止,作者只介绍了 C 宏,对 numeric_limits 模板(至少我认为它是一个模板)只字未提由于我的好奇心,我从互联网上学到了东西。
所以,现在我有点迷茫了,因为如果我理解正确的话,numeric_limits 是一种检查 C++ 类型限制的现代方法,因为它易于扩展。此外 AFAIK 在 C 宏中没有 C++11 类型的定义,如 char16_t。
搜索时我只找到了 that question ,但提供了尽可能有用的答案,不幸的是,他们没有回答我特别感兴趣的内容。而且他们实际上大多很老。
现在,具体问题:
基于 future 对代码执行速度、安全性和实用性的需求(我不太关心简单性)是使用那些旧的 C 宏更好还是我应该坚持 numeric_limits 考虑我提到的方面?
请原谅我的英语错误。这不是我的母语。
最佳答案
对于大多数代码,要么是 C 的宏,要么是 C++ 的 std::numeric_limits
工作正常。在 C++03 中有一个问题是 min()
和 max()
成员无法产生常量表达式,但这个问题已通过 C++11 的 constexpr
解决。 .
这两种方法都是完全类型安全的,如果您能够衡量一个程序的两个版本之间的差异(仅在获取类型属性的方式上有所不同),我会感到很惊讶。宏不能替代的主要领域是模板:您需要模板实体的固定名称,而宏不能那样工作(它们在编译期间也会在错误的时间展开)。
就个人而言,我总是使用 std::numeric_limits<T>
,主要是因为我可以在我的所有代码中使用它,而且我可以更好地记住这些名称。
关于c++ - 我应该使用 numeric_limits 还是 C limit 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640422/
我正在阅读 Setting an int to Infinity in C++ .我知道当一个人需要真正的无限时,应该使用 numeric_limits::infinity() ;我猜它背后的基本原理
我有一个错误 limits:30:29: error: 'numeric_limits' is not a template 在文件中,它为特定类重载了 std::numeric_limits:
如果你错误地做了类似的事情: #include int arr[3]; auto x = std::numeric_limits::max(); 您将从 STL 实现中的文件中获得无用的错误消息。
为什么这不起作用? enum : long {MaxValue = std::numeric_limits::max()}; 我收到错误:错误 1 错误 C2057:预期的常量表达式 它有什么不固
我在调试一些涉及确定加法运算是否会下溢 double 的代码时遇到了一些奇怪的行为,至少在我看来是这样。这是一个示例程序,展示了我的发现。 #include #include using std:
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why is std::numeric_limits::max() a function? 为什么 nume
我有一个带有两个参数的函数,一个其元素正在被测试的 vector ,以及一个我们输入为真或假的 bool 变量。如果我们输入 true 那么它应该隔离所有数字总和为偶数的元素并将其放置到一个新 vec
numeric_limits::min(); numeric_limits::lowest(); 这两个函数返回的值有什么不同? 最佳答案 C++11 标准第 18.3.2.4 段规定: static
我有一个包含范围参数的模板统计类。 template class limitStats { public: limitStats(T mx, T min) : max(mx),
我在为 enum 中的元素分配最大值时遇到问题。第一: protected: enum {DEFAULT_PADDING=std::numeric_limits::max()}; 结果: ./
基本上,我想这样做: // error: function call is not allowed in a constant expression: static_assert( std::nu
我正在使用想要使用 STL 的数据结构 limits确定我给它的结构的最小值、最大值和无穷大(我认为只有这些)值。我正在使用 Visual C++ 2010,如果有这方面的具体实现细节的话。 这是我的
有什么方法可以使用 std::numeric_limits::is_integer和 std::numeric_limits::is_specialized改变模板行为? 例如我可以这样做吗: tem
C++11 标准是否指定 numeric_limits::min和 max必须是可在模板中使用的常量表达式或 static_assert ? 更一般地说,如何根据标准找到常量表达式的函数列表? 最佳答
我有一个名为 Atomic 的类,它基本上是一个 _Atomic_word加上调用 gcc 原子内置函数的方法。 class Atomic{ mutable volatile _Atomic_
我创建了自己的类型,没有任何比较器,也没有专门化 std::numeric_limits .尽管如此,出于某种原因,std::numeric_limits编译得很好。为什么 c++ 标准委员会定义 n
我想在一个类中定义一个常量,它的值是最大可能的 int。像这样的: class A { ... static const int ERROR_VALUE = std::numeric_
我正在尝试从源代码编译应用程序,FlyWithLua ,其中包括 sol2 库。 我正在按照说明进行操作,但是当我运行 cmake --build ./build 时,出现以下错误: In file
当我编译这段 C++ 代码时,我没想到会看到这样的输出 #include #include #include int main() { const long double ldMinFl
我正在尝试编写一个分别处理数字和非数字数据的流类。有人可以向我解释为什么这段代码无法编译吗? #include #include #include #include class Stream
我是一名优秀的程序员,十分优秀!