此聲明編譯沒有以g ++ -pedantic -Wall(4.6.3版本)的警告:如何檢測分配給size_t的負數?
std::size_t foo = -42;
不易察覺僞造被聲明一個具有爲size_t參數的函數,並具有負的值調用它。這樣的功能可以防止無意中的否定論證(其表現爲不符合第4.7條第2款的規定)?
不完整的答案:
只更改爲size_t至(簽字)長丟棄的語義和爲size_t等優點。
將其更改爲ssize_t只是POSIX,而不是標準。
將其更改爲ptrdiff_t是脆弱的,有時會損壞。
測試巨大的值(高位比特集等)是任意的。
相關http://stackoverflow.com/questions/2711522/what-happens-if-i-assign-a-negative-value-to-an-unsigned-variable – halex
+1表示「不合格」。 Jk,+1,因爲這是一個很好的問題。 –
謝謝你,halex。我剛剛從那裏引用了標準。 –