std::ios_ba..._with_stdio(3)

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

okay bestie, welcome to the C++ Standard Libary manual page for std::ios_ba..._with_stdio(3) β€” aka std::ios_base::sync_with_stdio, the function that decides whether your C++ streams and C streams are synced up or doing their own separate thing. πŸ’–

πŸ’– NAME πŸ’–

std::ios_base::sync_with_stdio β€” std::ios_base::sync_with_stdio

✨ Synopsis ✨

static bool sync_with_stdio( bool sync = true );

Okay so this sets whether the standard C++ streams are synchronized to the standard C streams after each input/output operation. no cap, that’s the whole vibe. ✨

The standard C++ streams are these eight: std::cin, std::cout, std::cerr, std::clog, std::wcin, std::wcout, std::wcerr and std::wclog.

The standard C streams are these three: stdin, stdout and stderr.

For a standard stream str, synchronized with the C stream f, the following pairs of functions have identical effect:

  1. std::fputc(f, c) and str.rdbuf()->sputc(c).
  2. std::fgetc(f) and str.rdbuf()->sbumpc().
  3. std::ungetc(c, f) and str.rdbuf()->sputbackc(c).

In practice, this means the synchronized C++ streams are unbuffered, and each I/O operation on a C++ stream is immediately applied to the corresponding C stream’s buffer. This makes it possible to freely mix C++ and C I/O. πŸ¦‹

In addition, synchronized C++ streams are guaranteed to be thread-safe (individual characters output from multiple threads may interleave, but no data races occur). periodt. πŸ‘‘

If the synchronization is turned off, the C++ standard streams are allowed to buffer their I/O independently, which may be considerably faster in some cases. ⚑

By default, all eight standard C++ streams are synchronized with their respective C streams.

🚨 If this function is called after I/O has occurred on the standard stream, the behavior is implementation-defined: implementations range from no effect to destroying the read buffer. That is a big yikes β€” do not play with it. πŸ’€

πŸŽ€ Parameters πŸŽ€

  • sync β€” the new synchronization setting

πŸ¦‹ Return value πŸ¦‹

Synchronization state before the call to the function. That’s the tea. 🫢

πŸ’… Example πŸ’…

Run this code:

// Run this code

#include <cstdio>
#include <iostream>

int main()
{
    std::ios::sync_with_stdio(false);
    std::cout << "a\n";
    std::printf("b\n");
    std::cout << "c\n";
}

Possible output:

b
a
c

πŸ“ Defect reports πŸ“

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

  • DR: LWG 49 β€” Applied to: C++98
    • Behavior as published: it was unspecified (1) which state is actually returned and (2) what does 'synchronized' between standard C and C++ streams mean
    • Correct behavior: both specified

🌈 See also 🌈

  • cout β€” writes to the standard C output stream stdout
  • wcout β€” (global object)
  • cerr β€” writes to the standard C error stream stderr, unbuffered
  • wcerr β€” (global object)
  • clog β€” writes to the standard C error stream stderr
  • wclog β€” (global object)

mwah πŸ’‹ β€” this page’s source/version is http://cppreference.com, dated 2024.06.10, and the page title is std::ios_ba..._with_stdio(3). go off, bestie πŸ’…βœ¨

πŸ“¦ where this page comes from