询问以下问题的用户非常快地接受了"读取缓冲区": rdstate和rdbuf中的rd代表什么?
我仍然想知道"读取缓冲区"在"std :: ostream"(cout)的上下文中意味着什么.我没有找到任何描述此功能的STL文档作为任何"阅读".这只是一个错误的功能吗?(......显然,但也许我错过了什么)
C++ steam对象具有状态.如果一个人写一段代码就好
using namespace std;
cout << hex << setw(8) << setfill('0') << x << endl;
Run Code Online (Sandbox Code Playgroud)
忘记设置流状态.这将导致其他一些不相关的代码出现问题.进行"设置"和"后退"对匹配是很繁琐的.除此之外,在我看来,这也违背了RAII背后的惯例.
我的问题是:只有一层薄薄的包裹才有可能使这些状态操作成为类RAII.也就是说,在分号表达式结束后,流状态会自动设置回默认值.
更新:按照@ 0x499602D2提供的链接,可能会有一个解决方法
#include <boost/io/ios_state.hpp>
#include <ios>
#include <iostream>
#include <ostream>
#define AUTO_COUT(x) {\
boost::io::ios_all_saver ias( cout );\
x;\
}while(0)
Run Code Online (Sandbox Code Playgroud)
然后就可以使用宏了
AUTO_COUT(cout << hex << setw(8) << setfill('0') << x << endl);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果在多线程程序中出现有趣的事情,最好为那些保护类的boost :: io :: ios_state添加一个锁定字段.或者他们已经这样做了?
在返回"默认格式"的意义上,我遇到浮点值的格式问题.说我有2个花车:
float f1 = 3.0f, f2 = 1.5f;
std::cout << f1 << " - " << f2 << "\n";
Run Code Online (Sandbox Code Playgroud)
将这些显示为: 3 - 1.5
现在,出于某种原因,我需要设置精度std::cout(用于其他打印):
cout << std::precision(2);
Run Code Online (Sandbox Code Playgroud)
如果我再次打印我的两个花车,这将导致: 3.00 - 1.50
现在我想恢复默认格式.直到C++ 11,这似乎很难(或者是它?).但是,谢谢,我现在得到了这个新标志: std :: defaultfloat.我们试试吧:
std::cout << std::defaultfloat << f1 << " - " << f2;
Run Code Online (Sandbox Code Playgroud)
将打印:3 - 1.50.精细.
哦,等等.说我有:
float f1 = 444.0f, f2 = 444.5f;
Run Code Online (Sandbox Code Playgroud)
默认打印将显示: 444 - 444.5
设定精度(和"固定"):
cout << std::precision(2) << std::fixed;
Run Code Online (Sandbox Code Playgroud)
将会呈现: 444.00 - 444.50
但回到"默认":
std::cout …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
vector<UINT_PTR> test = GetMemoryAddresses();
cout << "Size: " << test.size() << endl;
for (UINT_PTR a : test) {
cout << "Memory Address: " << hex << a << endl;
}
cout << "Size: " << test.size() << endl;
Run Code Online (Sandbox Code Playgroud)
打印以下结果:
Size: 18
Memory Address: fc06a0
Memory Address: 13a70f0
Memory Address: 36c78c1
Memory Address: 3da0ea0
Memory Address: 3e21b80
Memory Address: c0a6881
Memory Address: c747690
Memory Address: c748b98
Memory Address: c74a1b8
Memory Address: c74ce10
Memory Address: c750c78
Memory Address: 1340a10f
Memory Address: …Run Code Online (Sandbox Code Playgroud) 我在代码中对std ::函数有些困惑。
cout<<tmp;
cout<<std::hex<<setw(4)<<tmp;
Run Code Online (Sandbox Code Playgroud)
tmp是一个int变量。设置tmp目录六角型,当我再次打印TMP之后,它不是转换回小数类型(在脸上,我必须包括的std :: DEC)。谁能为我解释幕后发生的事情?
提前致谢
bool one = true;
bool two = false;
bool three = true;
bool four = false;
cout << boolalpha;
cout << "value of one : " << one << endl;
cout << "value of two : " << two << endl;
cout << "value of three : " << three << endl;
cout << "value of four : " << four;
When I run this code, the values of `one` and `two` get printed out as `true` and `false`. I …Run Code Online (Sandbox Code Playgroud)