std::cout::setf无法工作(设置为十六进制)

3

我在《实用C++编程》这本书中测试了代码。但是,下面的示例并不像书中说的那样工作。我错过了什么吗?请帮忙。

#include <iostream>

int main() {
    int number = 0x3FF;
    std::cout << "Dec: " << number << '\n';
    std::cout.setf(std::ios::hex);
    std::cout << "Hex: " << number << '\n';

    std::cout.setf(std::ios::dec);
}

预期结果是:
Dec: 1023
Hex: 3ff

但是,我得到了
Dec: 1023
Dec: 1023

值得注意的是,您可以简单地执行 std::cout << std::ios::hex - undefined
1个回答

7
你需要使用setf的第二个重载函数,并使用std::ios::basefield掩码来清除基本标志: 查看此处
std::cout.setf(std::ios::hex, std::ios::basefield);

Dec: 1023
Hex: 3ff

在ideone上查看演示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接