5

您如何将布尔值的 cout 生成的输出大写。

我知道如果我这样做了:

cout << boolalpha << true;

它会输出

true

我如何让它输出

True

我觉得它与 do_truename 和 do_falsename 有关,但我不知道该怎么做。

4

1 回答 1

7

有那么一瞬间,我认为这可以使用std::uppercase,但似乎并非如此:这些仅适用于十六进制数字和指数之类的东西。因此,似乎确实需要一个std::numpunct<char>覆盖,但这并不是那么糟糕:

#include <iostream>
#include <locale>

struct numpunct
    : std::numpunct<char>
{
    std::string do_truename() const { return "True"; }
    std::string do_falsename() const { return "False"; }
};

int main()
{
    std::locale loc(std::cout.getloc(), new numpunct);
    std::cout.imbue(loc);
    std::cout << std::boolalpha << true << "\n";
}
于 2012-11-28T01:15:08.677 回答