std::basic_istream::sync(3)
β¨ std::basic_istream::sync(3) β¨
okay so welcome to the <pink>C++ Standard Libary</pink> page for std::basic_istream::sync, bestie π«Ά. this one is short, iconic, and lowkey mysterious because "what does sync even do" is a whole vibe check. let's get into it. π
πΈ NAME πΈ
std::basic_istream::sync - std::basic_istream::sync (yes bestie, the name is the name β self-titled album energy, no cap πΏ)
π Synopsis π
int sync();
The way that this works: it synchronizes the input buffer with the associated data source, periodt. It behaves as UnformattedInputFunction, except that gcount() is not affected. After constructing and checking the sentry object:
- If
rdbuf()is a null pointer, it returns-1. - Otherwise, it calls
rdbuf()->pubsync(). If that function returns-1, it callssetstate(badbit)and returns-1. Otherwise, it returns0.
That's literally the whole flow, fr fr.
π§Ύ Parameters π§Ύ
(none) β not me expecting parameters and getting none, she takes no arguments and she's still main character energy β¨
π Return value π
0 on success, -1 on failure or if the stream does not support this operation (is unbuffered). so if you get -1, it's giving "not supported" or "failed," not slay.
π Notes π
As with readsome(), it is implementation-defined whether this function does anything with library-supplied streams. The intent is typically for the next read operation to pick up any changes that may have been made to the associated input sequence after the stream buffer last filled its get area. To achieve that, sync() may empty the get area, or it may refill it, or it may do nothing. ngl, this is highkey unhinged behavior, but okay.
A notable exception is Visual Studio, where this operation discards the unprocessed input when called with a standard input stream. Visual Studio really said "unprocessed input? don't know her" π
π» Example π»
Demonstrates the use of input stream sync() with file input. Note that output here is implementation-defined, since calls to std::basic_filebuf::sync are implementation-defined for reads. so don't come for me if your output is different, bestie β that's the standard's whole thing.
Run this code:
#include <fstream>
#include <iostream>
void file_abc()
{
std::ofstream f("test.txt");
f << "abc\n";
}
void file_123()
{
std::ofstream f("test.txt");
f << "123\n";
}
int main()
{
file_abc(); // file now contains "abc"
std::ifstream f("test.txt");
std::cout << "Reading from the file\n";
char c;
f >> c;
std::cout << c;
file_123(); // file now contains "123"
f >> c;
std::cout << c;
f >> c;
std::cout << c << '\n';
f.close();
file_abc(); // file now contains "abc"
f.open("test.txt");
std::cout << "Reading from the file, with sync()\n";
f >> c;
std::cout << c;
file_123(); // file now contains "123"
f.sync();
f >> c;
std::cout << c;
f >> c;
std::cout << c << '\n';
}
π Possible output π
Reading from the file
abc
Reading from the file, with sync()
a23
π©Ή Defect reports π©Ή
The following behavior-changing defect reports were applied retroactively to previously published C++ standards. retroactive glow-up, iykyk π
- DR
LWG 62β applied to C++98. Behavior as published:sync()returnedtraits::eof()ifrdbuf()->pubsync()returns-1. Correct behavior: returns-1in this case.
π See also π
syncβ synchronizes the buffers with the associated character sequence;[virtual]virtual protected member function ofstd::basic_streambuf<CharT,Traits>.flushβ synchronizes with the underlying storage device; public member function ofstd::basic_ostream<CharT,Traits>.
signed, sealed, delivered by your fav C++ bestie π β source/version/date: http://cppreference.com, 2024.06.10, page std::basic_istream::sync(3). this page ate, no cap β obsessed with this for us π«Ά
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms