这个声明在g++ -pedantic -Wall(版本4.6.3)中可以顺利编译,且没有警告:
std::size_t foo = -42;
不太明显的错误是声明一个带有size_t参数的函数,并使用负值调用该函数。这样的函数能否保护不小心传入负参数(看起来像是遵守§4.7/2的大量五十亿)?
不完整的答案:
只是将size_t更改为(有符号)长整型会丢弃size_t的语义和其他优点。
将其更改为ssize_t仅仅是POSIX,而不是标准。
将其更改为ptrdiff_t是脆弱的,有时是错误的。
对于巨大值(高位设置等),进行测试是任意的。
unsigned
是邪恶的。我见过由于像while(size_t index < container.size()-1)
这样的代码在空的container
上触发而引起可怕的 bug。我知道当可用位数很少时,unsigned
类型有时可能有用,但是将被广泛使用的通用整数类型size_t
定义为unsigned
而不是int
,这是一个巨大的、可怕的错误。对不起,我有点啰嗦,这只是我的小毛病而已。unsigned
...呃。 - Michael