简单地说就是
#include <iostream>
using namespace std ;
int main()
{
ios_base::fmtflags initial ;
cout << 10 << ' ' << 15.0 << '\n' ;
initial = cout.setf(ios_base::fixed);
cout << 10 << ' ' << 15.0 << '\n' ;
cout.setf(initial);
cout << 10 << ' ' << 15.0 << '\n' ;
return 0;
}
此代码应生成以下输出:
10 15
10 15.000000
10 15
但事实并非如此。它产生的是:
10 15
10 15.000000
10 15.000000
显然,使用 initial 作为参数调用setf是行不通的。
问题是什么?
答案 0 :(得分:5)
setf
将设置标志,但不清除它们。因此setf(ios_base::fixed)
会设置&#34;固定&#34;标记,但setf(initial)
将保留它。
使用flags
分配所有标记。
cout.flags(initial);
答案 1 :(得分:2)
来自std::ios_base::floatfield
的位仍然存在于掩码的initial
部分中。您需要首先清除该掩码然后设置std::cout.setf(initial, std::ios_base::floatfield);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
:
$('#form_anim').on('submit', function(event, force) {
if (!force) {
var $this = $(this);
setTimeout(function() {
event.preventDefault();
$this.trigger('submit', true);
}, 2000);
}
});