关于setiosflags()的一个小疑惑

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    cout<<setw(10)<<3.1415<<endl;
    cout<<setw(10)<<setfill('0')<<3.1415<<endl;
    cout<<setw(10)<<setfill('0')
        <<setiosflags(ios::left)<<3.1415<<endl;
    cout<<setw(10)<<setfill('-')
            <<setiosflags(ios::right)<<3.1415<<endl;
    cout<<endl;
    // return 0;
 
    
    cout<<setw(10)<<setfill('0')<<3.1415<<endl;
    cout<<setw(10)<<setfill('0')
        <<setiosflags(ios::left)<<3.1415<<endl;
    cout<<setw(10)<<3.1415<<endl;
    cout<<setw(10)<<setfill('-')
            <<setiosflags(ios::right)<<3.1415<<endl;
    return 0;
}


上面的第一段代码来自课本,也是正常输出.但第二段的代码我只是将第一行的代码换了个位置,结果却全部都变成右对齐了,(下图)我不理解.!!求解答.

img

哪看出右对齐了?你不是前面都填充内容了么