为什么这个C++程序输出错误?

Des*_*tor -5 c++ hex iostream numeric octal

考虑以下计划:

#include <iostream>
int main()
{
    std::cout<<std::ios::showbase<<123<<", "<<std::hex<<123<<", "<<std::oct<<123<<'\n';
}
Run Code Online (Sandbox Code Playgroud)

预期输出:123,0x7b,0173

获得的输出:512123,7b,173(参见现场演示:http://ideone.com/Khzj5j )

但如果我稍微修改上述程序如下:

#include <iostream>
using namespace std;
int main()
{
    cout<<showbase<<123<<", "<<hex<<123<<", "<<oct<<123<<'\n';
}
Run Code Online (Sandbox Code Playgroud)

现在我得到了理想的输出.(请参阅http://ideone.com/gcuHbm上的现场演示).

为什么第一个程序输出不正确但第二个程序没有?第一个项目出了什么问题?

Mil*_*nek 8

std::ios::showbase是格式标志. std::showbase是一个函数,它接受std::ios_base并调用ios_base::setf(std::ios::showbase)它来设置showbase标志.

您在第一个示例中使用先前,在第二个示例中使用后者.