【发布时间】:2021-12-03 08:25:07
【问题描述】:
为什么 std::counting_semaphore<> 的模板参数是 ptrdiff_t 而不是 size_t ?对我来说,最大信号量计数值为负是没有意义的。
【问题讨论】:
-
size_t在语义上不是计数,而是大小。此外,Herb、Bjarne(等人)都反复谈到使用无符号整数作为大小是一个错误。即使 语义上 可以使用无符号整数来表示诸如“大小”和“计数”之类的数字,它也会带来使用无符号整数的所有成本和混乱(定义明确的环绕) 与优化器友好的有符号整数相比。 -
@dfrib 添加一个来源,这就是答案。
-
为
std::ssize()open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1227r2.html 采用的提案包括指向其他类似提案的链接。 -
恕我直言,使用->滥用。名称仍然脱离上下文且令人困惑。对此有一个合理的共识。
-
STL 已有 28 年历史,C++ 的许多默认设置都是错误的。 Read this paper by Bjarne himself
标签: c++ language-lawyer semaphore c++20