是否有任何c ++标准段落说明为此使用-1
可移植且正确的方法,或者正确地执行此操作的唯一方法是使用预定义的值?
我曾与我的同事交谈,更好的是:使用-1
最多的无符号整数,或者使用从价值limits.h
还是std::numeric_limits
?
我告诉我的同事,使用limits.h
或从中使用预定义的最大值std::numeric_limits
是这样做的可移植且简洁的方法,但是,该同事反对与-1
数字限制一样具有可移植性,并且,它还有一个优点:
unsigned short i = -1; // unsigned short max
可以轻松更改为其他任何类型,例如
unsigned long i = -1; // unsigned long max
使用limits.h
头文件中的预定义值时,或者std::numeric_limits
还需要将其连同左侧的类型一起重写时。
不使用标准方式或未清楚表明意图通常是一个坏主意,我们稍后再付款
我会建议:
auto i = std::numeric_limits<unsigned int>::max();
或@jamesdin建议一个更好的方式,更接近C习惯:
unsigned int i = std::numeric_limits<decltype(i)>::max();
您的同事论点是不可接受的。更改int
-> long int
,如下所示:
auto i = std::numeric_limits<unsigned long int>::max();
-1
解决方案相比,不需要额外的工作(由于使用auto
)。。
using index_t = unsigned int;
... now in another file (or far away from the previous line) ...
const index_t max_index = -1;
首先,我们不明白为什么max_index
是-1
。最糟糕的是,如果有人想改进代码并定义
using index_t = ptrdiff_t;
=>则声明max_index=-1
不是max
了,你会得到一个bug的代码。同样,这种情况不会发生,例如:
const index_t max_index = std::numeric_limits<index_t>::max();
注意:使用时仍需注意std::numeric_limits
。它与整数无关,但与浮点数有关。
std::cout << "\ndouble lowest: "
<< std::numeric_limits<double>::lowest()
<< "\ndouble min : "
<< std::numeric_limits<double>::min() << '\n';
印刷品:
double lowest: -1.79769e+308
double min : 2.22507e-308 <-- maybe you expected -1.79769e+308 here!
min
返回给定类型的最小有限值lowest
返回给定类型的最小有限值 记住这一点总是很有趣,因为如果我们不注意(使用min
代替lowest
),它可能是错误的来源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句