gpt4 book ai didi

c++ - 将基场设置为零

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:31 24 4
gpt4 key购买 nike

我知道 basefielddec/oct/hex 的掩码,我只想使用 setf 流函数取消设置它们,但是无论我怎么尝试它都不对,所以我编写了以下示例来帮助我理解标志如何在内部查找 basefield 的所有可能值。

#include <iostream>
using namespace std;

int main()
{
typedef ios_base::fmtflags fmt;
fmt a, b, c = cout.basefield;

cout << "basefield: " << hex << c << endl;

cout << dec;
a = cout.flags();
b = a & c;
cout << "\ndec flags:\n";
cout << " a: " << hex << a << endl;
cout << " b: " << hex << b << endl;

cout << oct;
a = cout.flags();
b = a & c;
cout << "\noct flags:\n";
cout << " a: " << hex << a << endl;
cout << " b: " << hex << b << endl;

cout << hex;
a = cout.flags();
b = a & c;
cout << "\nhex flags:\n";
cout << " a: " << hex << a << endl;
cout << " b: " << hex << b << endl;

cout.setf(cout.flags() & ~cout.basefield);
a = cout.flags();
b = a & c;
cout << "\nunset basefiled:\n";
cout << " a: " << hex << a << endl;
cout << " b: " << hex << b << endl;
}

g++ 4.8.1 结果是:

basefield: 4a

dec flags:
a: 1002
b: 2

oct flags:
a: 1040
b: 40

hex flags:
a: 1008
b: 8

unset basefiled:
a: 1008
b: 8

当取消设置时,所有基本标志值都设置为与十六进制标志相同,所以我运行代码 Visual C++ 2008 和 Intel C++ XE,结果是:

basefield: e00

dec flags:
a: 201
b: 200

oct flags:
a: 401
b: 400

hex flags:
a: 801
b: 800

unset basefiled:
a: 801
b: 800

十六进制标志似乎与所有未设置的基数完全一致。

我想要的只是将标志设置为 dec\oct\hex 以外的值,这样当我实现自己的操纵器时,我可以检测到哪种格式正在使用我的格式或流格式。

谢谢。

最佳答案

您不能使用 setf 取消设置标志单参数重载 - 它只能设置新标志。使用 unsetf或带有两个参数的 setf 来取消设置标志。

关于c++ - 将基场设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com