读io_base时发现两段相似的代码,记录下来,希望能学到一些技巧!
// Formatting flags.
#if defined (_STLP_STATIC_CONST_INIT_BUG)
enum {
#else
// boris : type for all those constants is int
static const int
#endif
left = 0x0001,
right = 0x0002,
internal = 0x0004,
dec = 0x0008,
hex = 0x0010,
oct = 0x0020,
fixed = 0x0040,
scientific = 0x0080,
boolalpha = 0x0100,
showbase = 0x0200,
showpoint = 0x0400,
showpos = 0x0800,
skipws = 0x1000,
unitbuf = 0x2000,
uppercase = 0x4000,
adjustfield = left | right | internal,
basefield = dec | hex | oct,
floatfield = scientific | fixed,
// State flags.
goodbit = 0x00,
badbit = 0x01,
eofbit = 0x02,
failbit = 0x04,
// Openmode flags.
__default_mode = 0x0, /* implementation detail */
app = 0x01,
ate = 0x02,
binary = 0x04,
in = 0x08,
out = 0x10,
trunc = 0x20,
// Seekdir flags
beg = 0x01,
cur = 0x02,
end = 0x04
# ifdef _STLP_STATIC_CONST_INIT_BUG
}
# endif
;
这段代码出自STLport-5.1.5\stlport\stl\_iso_base.h。
// The following definitions of bitmask types are enums, not ints,
// as permitted (but not required) in the standard, in order to provide
// better type safety in iostream calls. A side effect is that
// expressions involving them are no longer compile-time constants.
enum _Ios_Fmtflags
{
_S_boolalpha = 1L << 0,
_S_dec = 1L << 1,
_S_fixed = 1L << 2,
_S_hex = 1L << 3,
_S_internal = 1L << 4,
_S_left = 1L << 5,
_S_oct = 1L << 6,
_S_right = 1L << 7,
_S_scientific = 1L << 8,
_S_showbase = 1L << 9,
_S_showpoint = 1L << 10,
_S_showpos = 1L << 11,
_S_skipws = 1L << 12,
_S_unitbuf = 1L << 13,
_S_uppercase = 1L << 14,
_S_adjustfield = _S_left | _S_right | _S_internal,
_S_basefield = _S_dec | _S_oct | _S_hex,
_S_floatfield = _S_scientific | _S_fixed,
_S_ios_fmtflags_end = 1L << 16
};
这段代码出自mingw-w64\x86_64-8.1.0-win32-sjlj-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\ios_base.h