### 🤔 The case we are talking about When deciding between `std::endl` and `'\n'` in C++, it really comes down to **flushing behavior** and **performance**: ---- ### 🧠 What they do - **`'\n'`** Inserts a newline into the output buffer, but _does not_ flush it immediately. The buffer is flushed automatically when it's full, on program exit, or before input operations. - **`std::endl`** Equivalent to `'\n'`, _PLUS_ an immediate `flush()` of the stream. ---- ### ⚙️ Performance Implications Frequent flushing slows things down, especially for file I/O or heavy output: - Test cases show printing millions of lines can slow from **0.65 s with `'\n'`** to over **2 s or more with `std::endl`**. - A Reddit user sums it up: > “std::endl is often implemented as … os << '\n'; os.flush(); …” > “std::endl can make your program unbearably slow. Use it only if you really need to flush”. ---- ### 👍 Best Practices 1. **Use `'\n'` by default**—it's fast and sufficient in most cases. 2. **Use `std::flush` explicitly** if you need to flush—but only when necessary. 3. **Reserve `std::endl`** for interactive use (like showing progress or prompting users) or when you're absolutely sure you need an immediate flush. From C++ Core Guidelines: “avoid `std::endl`” – it conflates two actions (newline + flush). ---- ### ✅ Summary | Use Case | `'\n'` | `std::endl` | |-----------------------------|------------------|--------------------| | Add newline | ✅ Yes | ✅ Yes | | Flush output immediately | ❌ No | ✅ Yes | | Fast bulk output | ✅ Fast | ❌ Slow | | Interactive/debug output | ✅ Usually fine | ✅ Useful | ---- ### 🎤 Real-world Advice Reddit users recommend: > “Personally I always use `\n`. When I want an explicit flush I use `std::flush`. That way you get the best performance and it’s always clear whether you intended the flush or not.” ---- ### 🎯 Conclusion - For most scenarios—like logging, file writes, competitive programming—**go with `'\n'`**. - Only use `std::flush` or `std::endl` when you really need to ensure the output is written immediately, such as when prompting the user or reporting runtime errors interactively.