Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_ostream<CharT,Traits>::sentry

      From cppreference.com
      <cpp‎ |io‎ |basic ostream
       
       
       
       
      class sentry;

      An object of classbasic_ostream::sentry is constructed in local scope at the beginning of each member function ofstd::basic_ostream that performs output (both formatted and unformatted). Its constructor prepares the output stream: checks if the stream is already in a failed state, flushes the tie()'d output streams, and performs other implementation-defined tasks if necessary. Implementation-defined cleanup, as well as flushing of the output stream if necessary, is performed in the destructor, so that it is guaranteed to happen if exceptions are thrown during output.

      Contents

      [edit]Member functions

      (constructor)
      constructs the sentry object. All the preparation tasks are done here
      (public member function)[edit]
      (destructor)
      finalizes the stream object after formatted output or after exception, if necessary
      (public member function)
      operator=
      the assignment operator is deleted
      (public member function)
      operator bool
      checks if the preparation of the stream object was successful
      (public member function)[edit]

      std::basic_ostream::sentry::sentry

      explicit sentry(std::basic_ostream<CharT, Traits>& os);

      Prepares the stream for formatted output.

      Ifos.good() isfalse, returns. Otherwise, ifos.tie() is not a null pointer, callsos.tie()->flush() to synchronize the output sequence with external streams. During preparation, the constructor may callsetstate(failbit) (which may throwstd::ios_base::failure).

      If after preparation is completed,os.good()==true, then any subsequent calls tooperatorbool will returntrue.

      Parameters

      os - output stream to prepare

      Exceptions

      std::ios_base::failure if the end of file condition occurs.


      std::basic_ostream::sentry::~sentry

      ~sentry();

      If(os.flags()&std::ios_base::unitbuf)&&!std::uncaught_exception()&& os.good()) istrue, callsos.rdbuf()->pubsync(). If that function returns-1, setsbadbit inos.rdstate() without propagating an exception.


      std::basic_ostream::sentry::operator bool

      explicit operatorbool()const;

      Checks whether the preparation of the output stream was successful.

      Parameters

      (none)

      Return value

      true if the preparation of the output stream was successful,false otherwise.

      [edit]Example

      Run this code
      #include <iostream>#include <sstream> struct Foo{char n[6];}; std::ostream& operator<<(std::ostream& os, Foo& f){    std::ostream::sentry s(os);if(s)        os.write(f.n,5);return os;} int main(){    Foo f={"abcde"};std::cout<< f<<'\n';}

      Output:

      abcde

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 397C++98the destructor might callos.flush(), which may throw exceptionsthe exception is not propagated
      LWG 442C++98operatorbool was not declaredconst (it isconst in thesynopsis)addedconst
      LWG 835C++98ifos setsunitbuf, the destructor would callos.flush(), which
      is anUnformattedOutputFunction and creates another sentry object
      (whose destructor then creates another sentry object and so on)
      calls
      os.rdbuf()->pubsync()
      in this case instead

      [edit]See also

      inserts formatted data
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_ostream/sentry&oldid=149635"

      [8]ページ先頭

      ©2009-2025 Movatter.jp