boolalpha大写

Gid*_*eon 5 c++

如何利用布尔值的cout生成的输出大写.

我知道如果我这样做:

cout << boolalpha << true;

它会输出

true

我如何让它输出

True

我有一些感觉它与do_truename和do_falsename有关,但我不知道如何做到这一点.

Die*_*ühl 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";
}
Run Code Online (Sandbox Code Playgroud)

  • @jogojapan:我正在尝试正确发布代码行为.所以,是的,该对象是隐式引用计数的,当引用它的最后一个`std :: locale`超出范围时,它将被销毁.由于`std :: locale`对象的维护有点隐含,并且它们最终出现在很多地方,因此感觉对象需要自动维护.由于周围没有`std :: shared_ptr <T>`,它使用自定义引用计数方案. (4认同)