1 <?xml version=
"1.0" encoding=
"ISO-8859-1"?>
3 PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en" lang=
"en">
8 <meta name=
"AUTHOR" content=
"pme@gcc.gnu.org (Phil Edwards)" />
9 <meta name=
"KEYWORDS" content=
"libstdc++, libstdc++-v3, GCC, g++" />
10 <meta name=
"DESCRIPTION" content=
"Explanatory notes about libstdc++-v3." />
11 <meta name=
"GENERATOR" content=
"vi and eight fingers" />
12 <title>Explanatory notes about libstdc++-v3 design
</title>
13 <link rel=
"StyleSheet" href=
"lib3styles.css" />
17 <h1 class=
"centered"><a name=
"top">Explanatory notes about libstdc++-v3
20 <p class=
"fineprint"><em>
21 The latest version of this document is always available at
22 <a href=
"http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html">
23 http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html
</a>.
27 To the
<a href=
"http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage
</a>.
31 <!-- ####################################################### -->
33 <h3><a name=
"cstdio">"I/O packages
",
<code>--enable-cstdio
</code></a></h3>
34 <p>In addition to all the nifty things which C++ can do for I/O, its library
35 also includes all of the I/O capabilites of C. Making them work together
36 can be a challenge, not only
37 <a href=
"27_io/howto.html#8">for the programmer
</a> but for the
40 <p>There are two ways to do a C++ library: the cool way, and the easy way.
41 More specifically, the cool-but-easy-to-get-wrong way, and the
42 easy-to-guarantee-correct-behavior way. For
3.0, the easy way is used.
44 <p>Choosing 'stdio' is the easy way. It builds a C++ library which forwards
45 all operations to the C library. Many of the C++ I/O functions are
46 specified in the standard 'as if' they called a certain C function; the
47 easiest way to get it correct is to actually call that function. The
48 disadvantage is that the C++ code will run slower (fortunately, the layer
51 <p>Choosing 'libio' is the cool way; it allows C++ and C to share some
52 buffers. It's disabled because of tricky synchronization issues. Other
53 cool ways (various methods of sharing resources between C and C++
54 facilities, instead of layering) are possible. This approach can speed
57 <p>Other packages are possible. For a new package, a header must be
58 written to provide types like streamsize (usually just a typedef), as
59 well as some internal types like
<code> __c_file_type
</code> and
60 <code> __c_lock
</code> (for the stdio case, these are FILE (as in
61 "FILE*
") and a simple POSIX mutex, respectively). An
62 interface class called
<code> __basic_file
</code> must also be filled in;
63 as an example, for the stdio case, these member functions are all
64 inline calles to fread, fwrite, etc.
66 <p>Return
<a href=
"#top">to the top of the page
</a> or
67 <a href=
"http://gcc.gnu.org/libstdc++/">to the homepage
</a>.
72 <h3><a name=
"alloc">Internal Allocators
</a></h3>
75 <p>Return
<a href=
"#top">to the top of the page
</a> or
76 <a href=
"http://gcc.gnu.org/libstdc++/">to the homepage
</a>.
80 <!-- ####################################################### -->
83 <p class=
"fineprint"><em>
84 See
<a href=
"17_intro/license.html">license.html
</a> for copying conditions.
85 Comments and suggestions are welcome, and may be sent to
86 <a href=
"mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list
</a>.