我注意到对C++ 11第5.6节的一些措辞更改.(我正在查看C++标准N3242草案,日期为2011-02-28.)新(草案)标准包括以下句子:
"对于积分操作数,/运算符产生代数商,丢弃任何小数部分;"
这个陈述不是03标准的5.6(ISO-IEC-14882-2003),但我不认为这是一个改变,是吗?这就是C和C++多年来的工作方式,除非我已经失去了理智(无论如何可能已经发生过).
你不会生气.
一个脚注5.6/4
说:
[C++03 footnote 74]:
根据正在进行的ISO C修订工作,整数除法的首选算法遵循ISO Fortran标准ISO/IEC 1539:1991中定义的规则,其中商始终向零舍入.
在C++ 11中,这种行为是明确需要的,而不是"首选"; 更改列在兼容性部分中:
[C++11: C.2.2]:
更改:指定整数/
和基本%
原理结果的舍入:增加可移植性,C99兼容性.
对原始特征的影响:使用整数除法的有效C++ 2003代码将结果舍入为0或朝向负无穷大,而此国际标准始终将结果舍入为0.