std::basic_fstream::swap(3)

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

πŸŽ€ std::basic_fstream::swap πŸŽ€

Hey bestie!! πŸ’– You're on the std::basic_fstream::swap(3) page from the C++ Standard Libary manual, and we're about to make this little swap moment make sense. No cap. 🫢

πŸ’– NAME πŸ’–

std::basic_fstream::swap - std::basic_fstream::swap

πŸ¦‹ Synopsis πŸ¦‹

void swap( basic_fstream& other );  (since C++11)

It exchanges the state of the stream with those of other. ✨

This is done by calling basic_iostream<CharT, Traits>::swap(other) and rdbuf()->swap(other.rdbuf()). iykyk πŸ’…

🌸 Parameters 🌸

  • other β€” stream to exchange the state with.

πŸ“ Return value πŸ“

(none) β€” literally none, bestie. 😌

πŸ’€ Exceptions πŸ’€

May throw implementation-defined exceptions. ⚠️ So like, keep that in mind, okay?

πŸ”₯ Example πŸ”₯

The example even says // Run this code, so go run it, bestie:

#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>

bool create_stream(std::fstream& fs, const std::string& path)
{
    try
    {
        std::fstream ts{path, ts.trunc | ts.in | ts.out};
        if (ts.is_open())
        {
            ts.swap(fs); // stream objects are not copyable
            return true;
        }
    }
    catch (...)
    {
        std::cout << "Exception!\n";
    }
    return false;
}

void use_stream(std::fstream& fs)
{
    fs.seekg(0);
    std::string data;
    fs >> data;
    std::cout << "data: " << std::quoted(data) << '\n';
}

int main()
{
    std::fstream fs;
    std::string path = "/tmp/test_file.txt";
    if (create_stream(fs, path))
    {
        fs.write(path.c_str(), path.length());
        use_stream(fs);
    }
}

🌈 Possible output 🌈

data: "/tmp/test_file.txt"

πŸ‘‘ See also πŸ‘‘

  • operator= β€” moves the file stream (C++11) (public member function).
  • swap β€” swaps two basic_filebuf objects (C++11) (public member function of std::basic_filebuf<CharT,Traits>).

mwah πŸ’‹ β€” source/version/date check: http://cppreference.com, 2024.06.10, page std::basic_fstream::swap(3). bye bestie, ily 🫢

πŸ“¦ where this page comes from