例如,我可以使用std::ostream十六进制的对象输出整数
std::cout << std::hex << 0xabc; //prints `abc`, not the base-10 representation
Run Code Online (Sandbox Code Playgroud)
所有基地都有通用的操纵器吗?就像是
std::cout << std::base(4) << 20; //I want this to output 110
Run Code Online (Sandbox Code Playgroud)
如果有,那我就没有其他问题了.如果没有,那我可以写一个吗?它不会要求我访问私人实施细节std::ostream吗?
请注意,我知道我可以编写一个带有数字的函数,并将其转换为字符串,该字符串是任何基数中该数字的表示.或者我可以使用已经存在的.我问的是自定义流操纵器 - 它们可能吗?
提前致谢
无法在线寻求帮助.有没有办法解决这个问题?
std::showbase仅增加了一个前缀(例如,0x在以下情况下std::hex)为非零数(如所解释这里).我想要一个格式化的输出0x0,而不是0.
但是,仅使用:std::cout << std::hex << "0x" << ....不是一个选项,因为右侧参数可能并不总是整数(或等价物).我正在寻找一个showbase替换,它将前缀为0 0x而不是扭曲非int(或等价物),如下所示:
using namespace std;
/* Desired result: */
cout << showbase << hex << "here is 20 in hex: " << 20 << endl; // here is 20 in hex: 0x14
/* Undesired result: */
cout << hex << "0x" << "here is 20 in hex: " << 20 << endl; // 0xhere is 20 in hex: …Run Code Online (Sandbox Code Playgroud) 我很好奇std :: setw和std :: setfill的真正返回类型
如我们所见,引用的返回值的数据类型为“未定义”。但是,是否可以声明没有返回类型的函数?
在这种情况下,我必须开发一种为“ cout”或“ cin”提供扩展功能的方法,并且该方法应称为
cout << foo(32, 'A', 0.00f) << "Hello world!";
Run Code Online (Sandbox Code Playgroud)
我应该如何声明该方法?