iostream
From Wikipedia, the free encyclopedia
| C++ Standard Library |
|---|
| ios |
| iostream |
| iomanip |
| map |
| fstream |
| C Standard Library |
| cassert |
| cctype |
| cerrno |
| cfloat |
| cmath |
| cstdio |
| cstdlib |
| ctime |
iostream is a header file which is used for input/output in the C++ programming language. It is part of the C++ standard library. The name stands for Input/Output Stream. In C++ and its predecessor, the C programming language, there is no special syntax for streaming data input or output. Instead, these are combined as a library of functions. Like the cstdio header inherited from C's stdio.h, iostream provides basic input and output services for C++ programs. iostream uses the objects cin, cout, cerr, and clog for sending data to and from the standard streams input, output, error (unbuffered), and error (buffered) respectively. As part of the C++ standard library, these objects are a part of the std namespace.
The canonical Hello world program can be expressed as follows:
#include <iostream> int main() { std::cout << "Hello, world!\n"; }
This program would output "Hello, world!" followed by a newline.
The cout object is of type ostream, which overloads the left bit-shift operator to make it perform an operation completely unrelated to bitwise operations. The cerr and clog objects are also of type ostream, so they overload that operator as well. The cin object is of type istream, which overloads the right bit-shift operator. The directions of the bit-shift operators make it seem as though data is flowing towards the output stream or flowing away from the input stream.
A commonly-used alternative to the newline character \n is endl, which is used as follows:
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; }
endl is an output manipulator that writes a newline and flushes the buffer, ensuring that the data is output immediately. Several other manipulators are listed below.
Contents |
[edit] Output formatting
[edit] Methods
width(int x) |
minimum number of characters for next output |
fill(char x) |
character used to fill with in the case that the width needs to be elongated to fill the minimum. |
precision(int x) |
sets the number of significant digits for floating-point numbers |
Example:
cout.width(10); cout << "ten" << "four" << "four";
[edit] Manipulators
Manipulators are objects that can modify a stream using the << or >> operators.
endl |
inserts a newline into the stream and calls flush. |
flush |
forces an output stream to write any buffered characters |
dec |
changes the output format of number to be in decimal format |
oct |
changes the output format of number to be in octal format |
hex |
changes the output format of number to be in hexadecimal format |
ws |
causes an inputstream to 'eat' whitespace |
showpoint |
tells the stream to show the decimal point and some zeros with whole numbers |
Other manipulators can be found using the header iomanip.
[edit] Criticism
In some environments, such as MinGW and embedded systems, the C++ standard library must be statically linked to a program, either because of licensing issues[1] or because of the lack of a C++ library in the system's firmware. Some implementations of the C++ standard library, such as GNU libstdc++, automatically construct a locale when building an ostream even if no types that could be affected by a locale (such as date, time, and money) are ever used.[2] For instance, a hello world program with the GNU implementation of the C++ standard library produces an executable an order of magnitude larger than an equivalent program that uses <cstdio>.[3] There exist partial implementations of the C++ standard library designed for space-constrained environments; their <iostream> may leave out features that programs in such environments may not need, such as locale support.[4]
[edit] References
- ^ MinGW Frequently Asked Questions: Why is my C++ binary so large?
- ^ GNU libstdc++ source code,
bits/ios_base.h - ^ Pin Eight: RAnT (Rants, Articles, and Treatises)
- ^ uClibc++ C++ library

