【发布时间】:2013-03-20 13:22:55
【问题描述】:
此声明在 g++ -pedantic -Wall(版本 4.6.3)中编译时没有警告:
std::size_t foo = -42;
不那么明显的虚假是声明一个带有 size_t 参数的函数,并用一个负值调用它。这样的函数能否防止无意的否定论点(显示为无数个 quintillion,遵守 §4.7/2)?
不完整的答案:
只是将 size_t 更改为 (signed) long 会丢弃 size_t 的语义和其他优点。
将其更改为 ssize_t 只是 POSIX,而不是标准。
将其更改为 ptrdiff_t 很脆弱,有时会损坏。
测试大值(高位设置等)是任意的。
【问题讨论】:
-
+1 表示“无数个 quintillion”。 Jk,+1,因为这是个好问题。
-
谢谢你,哈莱克斯。我只是从那里引用了标准。
-
测试高位不是随意的,是标准的。
-
IMO
unsigned是邪恶的。我见过由while(size_t index < container.size()-1)之类的东西在空container上触发引起的可怕错误。我知道unsigned类型有时在可用位很少时可能很有用,但是将广泛使用的通用整数类型size_t定义为unsigned而不是int是一个巨大的可怕的巨大错误。抱歉漫无边际,这恰好是我的一个小烦恼。unsigned...呃。