Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ios_base::iword

      From cppreference.com
      <cpp‎ |io‎ |ios base
       
       
       
       
      long& iword(int index);

      First, allocates or resizes the private storage (dynamic array oflong or another indexable data structure) sufficiently to makeindex a valid index, then returns a reference to thelong element of the private storage with the indexindex.

      The reference may be invalidated by any operation on thisios_base object, including another call toiword(), but the stored values are retained, so that reading fromiword(index) with the same index later will produce the same value until the next call tostd::basic_ios::copyfmt(). The value can be used for any purpose. The index of the element must be obtained by a previous call toxalloc(), otherwise the behavior is undefined. New elements are initialized to0.

      If the function fails (possibly caused by an allocation failure) and*this is a base class subobject of abasic_ios<> object or subobject, callsstd::basic_ios<>::setstate(badbit) which may throwstd::ios_base::failure.

      Contents

      [edit]Notes

      Typical use of iword storage is to pass information (e.g. custom formatting flags) from user-defined I/O manipulators to user-definedoperator<< andoperator>> or to user-defined formatting facets imbued into standard streams.

      [edit]Parameters

      index - index value of the element

      [edit]Return value

      A reference to the element.

      [edit]Exceptions

      May throwstd::ios_base::failure when setting the badbit.

      [edit]Example

      Run this code
      #include <iostream>#include <string> struct Foo{staticint foo_xalloc;std::string data;      Foo(conststd::string& s): data(s){}}; // Allocates the iword storage for use with Foo objectsint Foo::foo_xalloc= std::ios_base::xalloc(); // This user-defined operator<< prints the string in reverse if the iword holds 1std::ostream& operator<<(std::ostream& os, Foo& f){if(os.iword(Foo::foo_xalloc)==1)return os<<std::string(f.data.rbegin(), f.data.rend());elsereturn os<< f.data;} // This I/O manipulator flips the number stored in iword between 0 and 1std::ios_base& rev(std::ios_base& os){    os.iword(Foo::foo_xalloc)=!os.iword(Foo::foo_xalloc);return os;} int main(){    Foo f("example");std::cout<< f<<'\n'<< rev<< f<<'\n'<< rev<< f<<'\n';}

      Output:

      exampleelpmaxeexample

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 36C++98the stored value might not be
      retained if the reference is invalidated
      the stored value is retained
      until the next call ofcopyfmt()
      LWG 41C++98the function set badbit by itself on failure,
      butios_base does not provide such interface
      badbit is set bybasic_ios
      (if*this is its base class subobject)

      [edit]See also

      resizes the private storage if necessary and access to thevoid* element at the given index
      (public member function)[edit]
      [static]
      returns a program-wide unique integer that is safe to use as index topword() andiword()
      (public static member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/ios_base/iword&oldid=159114"

      [8]ページ先頭

      ©2009-2025 Movatter.jp