std::basic_...asic_istream(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

okay so this is the std::basic_istream::basic_istream constructor page from the C++ Standard Libary β€” manual name std::basic_...asic_istream(3) πŸ’…. Yes bestie, we're doing constructors today, and they are lowkey iconic.

πŸ’– NAME πŸ’–

std::basic_istream::basic_istream - std::basic_istream::basic_istream

✨ Synopsis ✨

explicit basic_istream( std::basic_streambuf<CharT, Traits>* sb );
(1)
protected:
(2) (since C++11)
basic_istream( const basic_istream& rhs ) = delete;
protected:
(3) (since C++11)
basic_istream( basic_istream&& rhs );
  1. (1) β€” constructs the basic_istream object, assigning initial values to the base class by calling basic_ios::init(sb). The value of gcount() is initialized to zero. slay.
  2. (2) β€” the copy constructor is protected, and it is = delete. Input streams are not copyable, periodt. 🚫
  3. (3) β€” the move constructor copies the value of gcount() from rhs, sets the gcount() value of rhs to zero, and uses basic_ios<CharT, Traits>::move(rhs) to move all basic_ios members, except for the rdbuf(), from rhs into *this. This move constructor is protected: it is called by the move constructors of movable input stream classes std::basic_ifstream and std::basic_istringstream, which know how to correctly move the associated stream buffer. iykyk πŸ¦‹

🫢 Parameters 🫢

  • sb β€” streambuffer to use as underlying device. the whole vibe provider, honestly.

🌈 Example 🌈

       // Run this code

        #include <iostream>
        #include <sstream>

        int main()
        {
            std::istringstream s1("hello");
            std::istream s2(s1.rdbuf()); // OK: s2 shares the buffer with s1

        //  std::istream s3(std::istringstream("test")); // ERROR: move
       constructor is protected
        //  std::istream s4(s2);                         // ERROR: copy
       constructor is deleted
            std::istringstream s5(std::istringstream("world")); // OK: move
       ctor called
                                                                //     by
       derived class

            std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
        }

πŸ“ Output: πŸ“

hello world

before you dip, bestie: the footer says source/version http://cppreference.com, date 2024.06.10, and manual name std::basic_...asic_istream(3) β€” love that for us πŸŽ€πŸ«Άβœ¨

πŸ“¦ where this page comes from