【发布时间】:2019-01-17 20:13:27
【问题描述】:
在阅读this question 时,我看到第一条评论说:
size_t的长度不是一个好主意,出于优化/UB 原因,正确的类型是有符号的。
随后是另一条支持该推理的评论。这是真的吗?
这个问题很重要,因为如果我要写例如一个矩阵库,图像尺寸可以是size_t,只是为了避免检查它们是否为负。但是所有循环自然会使用size_t。这会影响优化吗?
【问题讨论】:
-
许多人,包括 branje stroustrup 都认为使用无符号大小是错误的。我碰巧同意这一点,我喜欢使用
ptrdiff_t作为容器大小。 -
您可以为您的尺码类型命名一个别名(例如
using my_size_type = std::size_t;)。这使您可以轻松更改使用的类型。然后,您可以衡量两者的性能。请注意不要在代码中对my_size_type做出假设。 -
当相关优化未能发挥作用时(根据我的经验)通常可以忽略不计。我同意@SergeyA 的观点,因为我通常使用与我的
class最可能与之交互的任何类型。尽管其他人可能有不同的经历。 -
你可以从this question获得很多背景和相关信息。
-
@Ramon 和 OP:youtube.com/watch?v=Puio5dly9N8#t=42m40s