相关疑难解决方法(0)

STL"rdbuf"方法名称代表什么?

询问以下问题的用户非常快地接受了"读取缓冲区": rdstate和rdbuf中的rd代表什么?

我仍然想知道"读取缓冲区"在"std :: ostream"(cout)的上下文中意味着什么.我没有找到任何描述此功能的STL文档作为任何"阅读".这只是一个错误的功能吗?(......显然,但也许我错过了什么)

c++ stl

5
推荐指数
2
解决办法
303
查看次数

如何自动将流模式设置回默认值

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添加一个锁定字段.或者他们已经这样做了?

c++ iostream raii

5
推荐指数
1
解决办法
185
查看次数

格式化浮点数:返回默认值

在返回"默认格式"的意义上,我遇到浮点值的格式问题.说我有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)

c++ floating-point precision iomanip

5
推荐指数
2
解决办法
75
查看次数

为什么std :: hex会导致内存损坏vector.size()?

我有以下代码:

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)

c++ iostream memory-corruption

4
推荐指数
2
解决办法
183
查看次数

std :: hex保持值不变

我在代码中对std ::函数有些困惑。

cout<<tmp;
cout<<std::hex<<setw(4)<<tmp;
Run Code Online (Sandbox Code Playgroud)

tmp是一个int变量。设置tmp目录六角型,当我再次打印TMP之后,它不是转换回小数类型(在脸上,我必须包括的std :: DEC)。谁能为我解释幕后发生的事情?

提前致谢

c++ hex decimal std

1
推荐指数
1
解决办法
241
查看次数

如何反转 C++ 中“cout &lt;&lt; boolalpha”的效果?

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)

c++

1
推荐指数
1
解决办法
370
查看次数