📄 ostream
字号:
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), _Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL operator<<(_ULONGLONG _Val)
{ // insert an unsigned long long
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), _Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
#endif /* _LONGLONG */
_Myt& __CLR_OR_THIS_CALL operator<<(float _Val)
{ // insert a float
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), (double)_Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL operator<<(double _Val)
{ // insert a double
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), _Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL operator<<(long double _Val)
{ // insert a long double
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), _Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL operator<<(const void *_Val)
{ // insert a void pointer
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, use facet to insert
const _Nput& _Nput_fac = _USE(ios_base::getloc(), _Nput);
_TRY_IO_BEGIN
if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
_Myios::fill(), _Val).failed())
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL operator<<(_Mysb *_Strbuf)
{ // insert until end-of-file from a stream buffer
ios_base::iostate _State = ios_base::goodbit;
bool _Copied = false;
const sentry _Ok(*this);
if (_Ok && _Strbuf != 0)
for (int_type _Meta = _Traits::eof(); ; _Copied = true)
{ // extract another character from stream buffer
_TRY_BEGIN
_Meta = _Traits::eq_int_type(_Traits::eof(), _Meta)
? _Strbuf->sgetc() : _Strbuf->snextc();
_CATCH_ALL
_Myios::setstate(ios_base::failbit);
_RERAISE;
_CATCH_END
if (_Traits::eq_int_type(_Traits::eof(), _Meta))
break; // end of file, quit
_TRY_IO_BEGIN
if (_Traits::eq_int_type(_Traits::eof(),
_Myios::rdbuf()->sputc(
_Traits::to_char_type(_Meta))))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
_CATCH_IO_END
}
ios_base::width(0);
_Myios::setstate(_Strbuf == 0 ? ios_base::badbit
: !_Copied ? _State | ios_base::failbit : _State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL put(_Elem _Ch)
{ // insert a character
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (!_Ok)
_State |= ios_base::badbit;
else
{ // state okay, insert character
_TRY_IO_BEGIN
if (_Traits::eq_int_type(_Traits::eof(),
_Myios::rdbuf()->sputc(_Ch)))
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL write(const _Elem *_Str,
streamsize _Count)
{ // insert _Count characters from array _Str
#if _ITERATOR_DEBUG_LEVEL == 2
if (0 < _Count)
_DEBUG_POINTER(_Str);
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (!_Ok)
_State |= ios_base::badbit;
else
{ // state okay, insert characters
_TRY_IO_BEGIN
if (_Myios::rdbuf()->sputn(_Str, _Count) != _Count)
_State |= ios_base::badbit;
_CATCH_IO_END
}
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL flush()
{ // flush output stream
ios_base::iostate _State = ios_base::goodbit;
if (!ios_base::fail() && _Myios::rdbuf()->pubsync() == -1)
_State |= ios_base::badbit; // sync failed
_Myios::setstate(_State);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL seekp(pos_type _Pos)
{ // set output stream position to _Pos
if (!ios_base::fail()
&& (off_type)_Myios::rdbuf()->pubseekpos(_Pos,
ios_base::out) == _BADOFF)
_Myios::setstate(ios_base::failbit);
return (*this);
}
_Myt& __CLR_OR_THIS_CALL seekp(off_type _Off, ios_base::seekdir _Way)
{ // change output stream position by _Off, according to _Way
if (!ios_base::fail()
&& (off_type)_Myios::rdbuf()->pubseekoff(_Off, _Way,
ios_base::out) == _BADOFF)
_Myios::setstate(ios_base::failbit);
return (*this);
}
pos_type __CLR_OR_THIS_CALL tellp()
{ // return output stream position
if (!ios_base::fail())
return (_Myios::rdbuf()->pubseekoff(0,
ios_base::cur, ios_base::out));
else
return (pos_type(_BADOFF));
}
};
// basic_ostream TEMPLATE OPERATORS
template<class _Elem,
class _Traits> inline
void swap(basic_ostream<_Elem, _Traits>& _Left,
basic_ostream<_Elem, _Traits>& _Right)
{ // swap _Left and _Right basic_ostreams
_Left.swap(_Right);
}
#ifndef _NATIVE_WCHAR_T_DEFINED
/* NOTE:
If you are not using native wchar_t, the following explicit
specialization will mask the member function (above) that treats
an unsigned short as an integer.
To read or write unsigned shorts as integers with wchar_t streams,
make wchar_t a native type with the command line option /Zc:wchar_t.
*/
template<> inline
basic_ostream<unsigned short, char_traits<unsigned short> >&
__CLR_OR_THIS_CALL basic_ostream<unsigned short,
char_traits<unsigned short> >::operator<<(unsigned short _Ch)
{ // extract a character
typedef char_traits<unsigned short> _Traits;
ios_base::iostate _State = ios_base::goodbit;
const sentry _Ok(*this);
if (_Ok)
{ // state okay, insert
streamsize _Pad = width() <= 1 ? 0 : width() - 1;
_TRY_IO_BEGIN
if ((flags() & ios_base::adjustfield) != ios_base::left)
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
rdbuf()->sputc(fill())))
_State |= ios_base::badbit;
if (_State == ios_base::goodbit
&& _Traits::eq_int_type(_Traits::eof(),
rdbuf()->sputc(_Ch)))
_State |= ios_base::badbit;
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
rdbuf()->sputc(fill())))
_State |= ios_base::badbit;
_CATCH_IO_END
}
width(0);
_Myios::setstate(_State);
return (*this);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE)
#ifdef __FORCE_INSTANCE
template class _CRTIMP2_PURE basic_ostream<char,
char_traits<char> >;
template class _CRTIMP2_PURE basic_ostream<wchar_t,
char_traits<wchar_t> >;
#ifdef _CRTBLD_NATIVE_WCHAR_T
template class _CRTIMP2_PURE basic_ostream<unsigned short,
char_traits<unsigned short> >;
#endif /* _CRTBLD_NATIVE_WCHAR_T */
#endif /* __FORCE_INSTANCE */
#endif /* defined(_DLL_CPPLIB) etc. */
// INSERTERS
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>& operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val)
{ // insert NTBS
ios_base::iostate _State = ios_base::goodbit;
streamsize _Count = (streamsize)_CSTD strlen(_Val); // may overflow
streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
? 0 : _Ostr.width() - _Count;
const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);
if (!_Ok)
_State |= ios_base::badbit;
else
{ // state okay, insert characters
_TRY_IO_BEGIN
const ctype<_Elem>& _Ctype_fac = _USE(_Ostr.getloc(), ctype<_Elem>);
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; 0 < _Pad; --_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
for (; _State == ios_base::goodbit && 0 < _Count; --_Count, ++_Val)
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ctype_fac.widen(*_Val))))
_State |= ios_base::badbit;
if (_State == ios_base::goodbit)
for (; 0 < _Pad; --_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
{ // insertion failed, quit
_State |= ios_base::badbit;
break;
}
_Ostr.width(0);
_CATCH_IO_(_Ostr)
}
_Ostr.setstate(_State);
return (_Ostr);
}
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>& operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, char _Ch)
{ // insert a character
ios_base::iostate _State = ios_base::goodbit;
const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);
if (_Ok)
{ // state okay, insert
const ctype<_Elem>& _Ctype_fac = _USE(_Ostr.getloc(), ctype<_Elem>);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -