为何默认右对齐时cout.flags()&std::ios_base::right输出0而非128?
问题解答
这是因为C++标准库中,std::cout的默认右对齐行为并不是通过置位std::ios_base::right标志实现的,而是adjustfield对齐字段的默认状态导致的。
关键细节:
std::ios_base::adjustfield是一个包含三个互斥对齐标志的位域:left、right、internal。同一时间这个位域只会置位其中一个标志,或者完全不置位。- 默认情况下,
adjustfield的所有位都是0(没有显式设置任何对齐标志),此时流的默认行为就是右对齐。所以你用flags() & std::ios_base::right得到0,是因为这个标志位根本没被设置。 - 当你调用
std::cout.setf(std::ios_base::right, std::ios_base::adjustfield)时,是强制把adjustfield的位设置为right对应的掩码值,此时flags() & right自然会返回right的数值(也就是你看到的128)。
验证建议:
如果想确认默认对齐行为,无需检查right标志位,直接测试输出效果即可——就像你一开始用setw(10)输出"abb"得到右对齐的结果,这已经能证明默认是右对齐了。
内容的提问来源于stack exchange,提问作者user19946454
相关产品推荐
相关产品推荐

