C ++保存成员函数setf()的返回值

时间:2015-05-28 15:03:42

标签: c++

简单地说就是

#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是行不通的。

问题是什么?

2 个答案:

答案 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);
    }
});