PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/www.cppreference.com/wiki/data_types

https://github.com/tsgates/cclookup
#! | 381 lines | 355 code | 26 blank | 0 comment | 0 complexity | 93618f410e74df5ab69858389bae1faa MD5 | raw file
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
  4. lang="en" dir="ltr">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>data_types</title>
  8. <meta name="generator" content="DokuWiki" />
  9. <meta name="robots" content="index,follow" />
  10. <meta name="date" content="2010-10-28T18:17:08-0700" />
  11. <meta name="keywords" content="data_types" />
  12. <link rel="search" type="application/opensearchdescription+xml" href="http://www.cppreference.com/wiki/lib/exe/opensearch.php" title="C++ Reference" />
  13. <link rel="start" href="../index.html" />
  14. <link rel="contents" href="http://www.cppreference.com/wiki/data_types?do=index" title="Sitemap" />
  15. <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="http://www.cppreference.com/wiki/feed.php" />
  16. <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="http://www.cppreference.com/wiki/feed.php?mode=list&amp;ns=" />
  17. <link rel="alternate" type="text/html" title="Plain HTML" href="http://www.cppreference.com/wiki/_export/xhtml/data_types" />
  18. <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://www.cppreference.com/wiki/_export/raw/data_types" />
  19. <link rel="canonical" href="data_types" />
  20. <link rel="stylesheet" media="screen" type="text/css" href="lib/exe/css.php@t=custom1&amp;tseed=1289693594" />
  21. <link rel="stylesheet" media="all" type="text/css" href="lib/exe/css.php@s=all&amp;t=custom1&amp;tseed=1289693594" />
  22. <link rel="stylesheet" media="print" type="text/css" href="lib/exe/css.php@s=print&amp;t=custom1&amp;tseed=1289693594" />
  23. <script type="text/javascript" ><!--//--><![CDATA[//><!--
  24. var NS='';var JSINFO = {"id":"data_types","namespace":""};
  25. //--><!]]></script>
  26. <script type="text/javascript" charset="utf-8" src="lib/exe/js.php@tseed=1289693594" ></script>
  27. </head>
  28. <body>
  29. <div class="dokuwiki export">
  30. <!-- TOC START -->
  31. <div class="toc">
  32. <div class="tocheader toctoggle" id="toc__header">Table of Contents</div>
  33. <div id="toc__inside">
  34. <ul class="toc">
  35. <li class="clear">
  36. <ul class="toc">
  37. <li class="level2"><div class="li"><span class="li"><a href="data_types#c_data_types" class="toc">C++ Data Types</a></span></div>
  38. <ul class="toc">
  39. <li class="level3"><div class="li"><span class="li"><a href="data_types#type_modifiers" class="toc">Type Modifiers</a></span></div></li>
  40. <li class="level3"><div class="li"><span class="li"><a href="data_types#type_sizes_and_ranges" class="toc">Type Sizes and Ranges</a></span></div></li>
  41. <li class="level3"><div class="li"><span class="li"><a href="data_types#reading_type_declarations" class="toc">Reading Type Declarations</a></span></div></li></ul>
  42. </li></ul>
  43. </li></ul>
  44. </div>
  45. </div>
  46. <!-- TOC END -->
  47. <h2 class="sectionedit1"><a name="c_data_types" id="c_data_types">C++ Data Types</a></h2>
  48. <div class="level2">
  49. <p>
  50. C++ standard defines 7 basic types:
  51. </p>
  52. <div class="table sectionedit2"><table class="inline">
  53. <tr class="row0">
  54. <th class="col0">Type</th><th class="col1">Description</th>
  55. </tr>
  56. <tr class="row1">
  57. <td class="col0"><code>void</code></td><td class="col1">associated with no data type</td>
  58. </tr>
  59. <tr class="row2">
  60. <td class="col0"><code>bool</code></td><td class="col1">boolean value, true or false</td>
  61. </tr>
  62. <tr class="row3">
  63. <td class="col0"><code>char</code></td><td class="col1">character</td>
  64. </tr>
  65. <tr class="row4">
  66. <td class="col0"><code>int</code></td><td class="col1">integer</td>
  67. </tr>
  68. <tr class="row5">
  69. <td class="col0"><code>float</code></td><td class="col1">floating-point number</td>
  70. </tr>
  71. <tr class="row6">
  72. <td class="col0"><code>double</code></td><td class="col1">double precision floating-point number</td>
  73. </tr>
  74. <tr class="row7">
  75. <td class="col0"><code>wchar_t</code></td><td class="col1">wide character</td>
  76. </tr>
  77. </table></div>
  78. <!-- EDIT2 TABLE [64-316] -->
  79. </div>
  80. <!-- EDIT1 SECTION "C++ Data Types" [1-317] -->
  81. <h3 class="sectionedit3"><a name="type_modifiers" id="type_modifiers">Type Modifiers</a></h3>
  82. <div class="level3">
  83. <p>
  84. Several of these types can be modified using the keywords <code>signed</code>, <code>unsigned</code>, <code>short</code>, and <code>long</code>. When one of these type modifiers is used by itself, a data type of <code>int</code> is assumed. A complete list of possible data types follows (equivalent types are displayed in the same row):
  85. </p>
  86. <div class="table sectionedit4"><table class="inline">
  87. <tr class="row0">
  88. <th class="col0" colspan="4">integer types</th>
  89. </tr>
  90. <tr class="row1">
  91. <td class="col0" colspan="4"><code>bool</code></td>
  92. </tr>
  93. <tr class="row2">
  94. <td class="col0" colspan="4"><code>char</code></td>
  95. </tr>
  96. <tr class="row3">
  97. <td class="col0" colspan="4"><code>signed char</code></td>
  98. </tr>
  99. <tr class="row4">
  100. <td class="col0" colspan="4"><code>unsigned char</code></td>
  101. </tr>
  102. <tr class="row5">
  103. <td class="col0" colspan="4"><code>wchar_t</code></td>
  104. </tr>
  105. <tr class="row6">
  106. <td class="col0"><code>short</code></td><td class="col1"><code>short int</code></td><td class="col2"><code>signed short</code></td><td class="col3"><code>signed short int</code></td>
  107. </tr>
  108. <tr class="row7">
  109. <td class="col0" colspan="2"><code>unsigned short</code></td><td class="col2" colspan="2"><code>unsigned short int</code></td>
  110. </tr>
  111. <tr class="row8">
  112. <td class="col0"><code>int</code></td><td class="col1"><code>signed</code></td><td class="col2" colspan="2"><code>signed int</code></td>
  113. </tr>
  114. <tr class="row9">
  115. <td class="col0" colspan="2"><code>unsigned</code></td><td class="col2" colspan="2"><code>unsigned int</code></td>
  116. </tr>
  117. <tr class="row10">
  118. <td class="col0"><code>long</code></td><td class="col1"><code>long int</code></td><td class="col2"><code>signed long</code></td><td class="col3"><code>signed long int</code></td>
  119. </tr>
  120. <tr class="row11">
  121. <td class="col0" colspan="2"><code>unsigned long</code></td><td class="col2" colspan="2"><code>unsigned long int</code></td>
  122. </tr>
  123. <tr class="row12">
  124. <th class="col0" colspan="4">floating point types</th>
  125. </tr>
  126. <tr class="row13">
  127. <td class="col0" colspan="4"><code>float</code></td>
  128. </tr>
  129. <tr class="row14">
  130. <td class="col0" colspan="4"><code>double</code></td>
  131. </tr>
  132. <tr class="row15">
  133. <td class="col0" colspan="4"><code>long double</code></td>
  134. </tr>
  135. <tr class="row16">
  136. <th class="col0" colspan="4">optionally supported integer types</th>
  137. </tr>
  138. <tr class="row17">
  139. <td class="col0"><code>long long</code></td><td class="col1"><code>long long int</code></td><td class="col2"><code>signed long long</code></td><td class="col3"><code>signed long long int</code></td>
  140. </tr>
  141. <tr class="row18">
  142. <td class="col0" colspan="2"><code>unsigned long long</code></td><td class="col2" colspan="2"><code>unsigned long long in</code>t</td>
  143. </tr>
  144. </table></div>
  145. <!-- EDIT4 TABLE [637-1281] -->
  146. </div>
  147. <!-- EDIT3 SECTION "Type Modifiers" [318-1282] -->
  148. <h3 class="sectionedit5"><a name="type_sizes_and_ranges" id="type_sizes_and_ranges">Type Sizes and Ranges</a></h3>
  149. <div class="level3">
  150. <p>
  151. The size and range of any data type is compiler and architecture dependent. You can use the <a href="keywords/sizeof" class="wikilink1" title="keywords:sizeof">sizeof</a> operator to determine the
  152. size of any data type (frequently expressed as a number of bytes). However, many architectures implement data types of a standard size. <code>ints</code> and <code>floats</code> are often 32-bit, chars 8-bit, and
  153. <code>doubles</code> are usually 64-bit. <code>bools</code> are often implemented as 8-bit data types.
  154. <code>long long</code> type is 64-bit. The cfloat (or float.h) header file defines the ranges for the floating types, the
  155. climits (or limits.h) - for the integer types.
  156. </p>
  157. <p>
  158. Limits for numeric values are defined in the &lt;limits&gt; header. The templated values of <a href="limits/numeric_limits" class="wikilink1" title="limits:numeric_limits">numeric_limits</a> provide system-dependant numerical representations of the C++ data types. Use the appropriate function given the data type as the template argument as shown in the table below. Note that numeric_limits can be overloaded for user-defined types as well.
  159. </p>
  160. <div class="table sectionedit6"><table class="inline">
  161. <tr class="row0">
  162. <th class="col0"> Method or Constant </th><th class="col1"> Return </th><th class="col2"> Description </th>
  163. </tr>
  164. <tr class="row1">
  165. <td class="col0">is_specialized</td><td class="col1">bool</td><td class="col2"> </td>
  166. </tr>
  167. <tr class="row2">
  168. <td class="col0">radix</td><td class="col1">int</td><td class="col2">base of exponent</td>
  169. </tr>
  170. <tr class="row3">
  171. <td class="col0">digits</td><td class="col1">int</td><td class="col2">number of radix digits in mantissa</td>
  172. </tr>
  173. <tr class="row4">
  174. <td class="col0">digits10</td><td class="col1">int</td><td class="col2">number of base 10 digits in mantissa</td>
  175. </tr>
  176. <tr class="row5">
  177. <td class="col0">is_signed</td><td class="col1">bool</td><td class="col2"> </td>
  178. </tr>
  179. <tr class="row6">
  180. <td class="col0">is_integer</td><td class="col1">bool</td><td class="col2"> </td>
  181. </tr>
  182. <tr class="row7">
  183. <td class="col0">is_exact</td><td class="col1">bool</td><td class="col2"> </td>
  184. </tr>
  185. <tr class="row8">
  186. <td class="col0">min()</td><td class="col1">&lt;type&gt;</td><td class="col2">smallest number that can be respresented (not the most negative)</td>
  187. </tr>
  188. <tr class="row9">
  189. <td class="col0">max()</td><td class="col1">&lt;type&gt;</td><td class="col2">largest number</td>
  190. </tr>
  191. <tr class="row10">
  192. <td class="col0">epsilon()</td><td class="col1">&lt;type&gt;</td><td class="col2">inherent representation error value</td>
  193. </tr>
  194. <tr class="row11">
  195. <td class="col0">round_error()</td><td class="col1">&lt;type&gt;</td><td class="col2">maximum rounding adjustment possible</td>
  196. </tr>
  197. <tr class="row12">
  198. <td class="col0">infinity()</td><td class="col1">&lt;type&gt;</td><td class="col2"> </td>
  199. </tr>
  200. <tr class="row13">
  201. <td class="col0">quiet_NaN()</td><td class="col1">&lt;type&gt;</td><td class="col2">invalid number that does not signal floating point error</td>
  202. </tr>
  203. <tr class="row14">
  204. <td class="col0">signaling_NaN()</td><td class="col1">&lt;type&gt;</td><td class="col2">invalid number that signals floating point error</td>
  205. </tr>
  206. <tr class="row15">
  207. <td class="col0">denorm_min()</td><td class="col1">&lt;type&gt;</td><td class="col2"> </td>
  208. </tr>
  209. <tr class="row16">
  210. <td class="col0">min_exponent</td><td class="col1">int</td><td class="col2"> </td>
  211. </tr>
  212. <tr class="row17">
  213. <td class="col0">min_exponent10</td><td class="col1">int</td><td class="col2"> </td>
  214. </tr>
  215. <tr class="row18">
  216. <td class="col0">max_exponent</td><td class="col1">int</td><td class="col2"> </td>
  217. </tr>
  218. <tr class="row19">
  219. <td class="col0">max_exponent10</td><td class="col1">int</td><td class="col2"> </td>
  220. </tr>
  221. <tr class="row20">
  222. <td class="col0">has_infinity</td><td class="col1">bool</td><td class="col2"> </td>
  223. </tr>
  224. <tr class="row21">
  225. <td class="col0">has_quiet_NaN</td><td class="col1">bool</td><td class="col2"> </td>
  226. </tr>
  227. <tr class="row22">
  228. <td class="col0">has_signaling_NaN</td><td class="col1">bool</td><td class="col2"> </td>
  229. </tr>
  230. <tr class="row23">
  231. <td class="col0">has_denorm</td><td class="col1">&lt;type&gt;_denorm_style</td><td class="col2"> </td>
  232. </tr>
  233. <tr class="row24">
  234. <td class="col0">has_denorm_loss</td><td class="col1">bool</td><td class="col2"> </td>
  235. </tr>
  236. <tr class="row25">
  237. <td class="col0">is_iec559</td><td class="col1">bool</td><td class="col2">conforms to IEC-559</td>
  238. </tr>
  239. <tr class="row26">
  240. <td class="col0">is_bounded</td><td class="col1">bool</td><td class="col2"> </td>
  241. </tr>
  242. <tr class="row27">
  243. <td class="col0">is_modulo</td><td class="col1">bool</td><td class="col2"> </td>
  244. </tr>
  245. <tr class="row28">
  246. <td class="col0">traps</td><td class="col1">bool</td><td class="col2"> </td>
  247. </tr>
  248. <tr class="row29">
  249. <td class="col0">tinyness_before</td><td class="col1">bool</td><td class="col2"> </td>
  250. </tr>
  251. <tr class="row30">
  252. <td class="col0">round_style</td><td class="col1">float_round_style { round_to_nearest, }</td><td class="col2"> </td>
  253. </tr>
  254. </table></div>
  255. <!-- EDIT6 TABLE [2266-3340] -->
  256. <p>
  257. The most common usage is in bounds checking, to determine the minimum and maximum values a data type can hold. The following code prints out the minimum and maximum values for a short on the system it is run.
  258. </p>
  259. <pre class="cpp code cpp"> <span class="co2">#include &lt;limits&gt;</span>
  260. std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Maximum short value: &quot;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">numeric_limits</span><span class="sy1">&lt;</span><span class="kw4">short</span><span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">max</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span>
  261. std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Minimum short value: &quot;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">numeric_limits</span><span class="sy1">&lt;</span><span class="kw4">short</span><span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">min</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span></pre>
  262. </div>
  263. <!-- EDIT5 SECTION "Type Sizes and Ranges" [1283-3766] -->
  264. <h3 class="sectionedit7"><a name="reading_type_declarations" id="reading_type_declarations">Reading Type Declarations</a></h3>
  265. <div class="level3">
  266. <p>
  267. Simple type declarations are easy to understand:
  268. </p>
  269. <pre class="cpp code cpp"> <span class="kw4">int</span> i</pre>
  270. <p>
  271. However, it can be tricky to parse more complicated type declarations:
  272. </p>
  273. <pre class="cpp code cpp"> <span class="kw4">double</span> <span class="sy2">**</span>d<span class="br0">&#91;</span><span class="nu0">8</span><span class="br0">&#93;</span> <span class="co1">// hmm...</span>
  274. <span class="kw4">char</span> <span class="sy2">*</span><span class="br0">&#40;</span><span class="sy2">*</span><span class="br0">&#40;</span><span class="sy2">**</span>foo <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">8</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="co1">// augh! what is foo?</span></pre>
  275. <p>
  276. To understand the above declarations, follow three rules:
  277. </p>
  278. <ol>
  279. <li class="level1"><div class="li"> Start at the variable name (<code>d</code> or <code>foo</code> in the examples above)</div>
  280. </li>
  281. <li class="level1"><div class="li"> End with the data type (<code>double</code> or <code>char</code> above)</div>
  282. </li>
  283. <li class="level1"><div class="li"> Go right when you can, and left when you must. (Grouping parentheses can cause you to bounce left.)</div>
  284. </li>
  285. </ol>
  286. <p>
  287. For example:
  288. </p>
  289. <div class="table sectionedit8"><table class="inline">
  290. <tr class="row0">
  291. <th class="col0">Expression</th><th class="col1">Meaning</th>
  292. </tr>
  293. <tr class="row1">
  294. <td class="col0"> <code>double **d[8];</code> </td><td class="col1"> </td>
  295. </tr>
  296. <tr class="row2">
  297. <td class="col0"> <code><del>double</del> **<del>d</del>[8];</code> </td><td class="col1"> <strong>d is double</strong> </td>
  298. </tr>
  299. <tr class="row3">
  300. <td class="col0"> <code><del>double</del> **<del>d[8]</del>;</code> </td><td class="col1"> d is <strong>an array of 8</strong> double </td>
  301. </tr>
  302. <tr class="row4">
  303. <td class="col0"> <code><del>double</del> *<del>*d[8]</del>;</code> </td><td class="col1"> d is an array of 8 <strong>pointer to</strong> double </td>
  304. </tr>
  305. <tr class="row5">
  306. <td class="col0"> <code><del>double **d[8]</del>;</code> </td><td class="col1"> d is an array of 8 pointer to <strong>pointer to</strong> double </td>
  307. </tr>
  308. </table></div>
  309. <!-- EDIT8 TABLE [4363-4752] -->
  310. <p>
  311. Another example:
  312. </p>
  313. <div class="table sectionedit9"><table class="inline">
  314. <tr class="row0">
  315. <th class="col0">Expression</th><th class="col1">Meaning</th>
  316. </tr>
  317. <tr class="row1">
  318. <td class="col0"> <code>char *(*(**foo [][8])())[]</code> </td><td class="col1"> </td>
  319. </tr>
  320. <tr class="row2">
  321. <td class="col0"> <code><del>char</del> *(*(**<del>foo</del> [][8])())[]</code> </td><td class="col1"> <strong>foo is char</strong> </td>
  322. </tr>
  323. <tr class="row3">
  324. <td class="col0"> <code><del>char</del> *(*(**<del>foo []</del>[8])())[]</code> </td><td class="col1"> foo is <strong>an array of</strong> char </td>
  325. </tr>
  326. <tr class="row4">
  327. <td class="col0"> <code><del>char</del> *(*(**<del>foo [][8]</del>)())[]</code> </td><td class="col1"> foo is an array of <strong>an array of 8</strong> char </td>
  328. </tr>
  329. <tr class="row5">
  330. <td class="col0"> <code><del>char</del> *(*(*<del>*foo [][8]</del>)())[]</code> </td><td class="col1"> foo is an array of an array of 8 <strong>pointer to</strong> char </td>
  331. </tr>
  332. <tr class="row6">
  333. <td class="col0"> <code><del>char</del> *(*<del>(**foo [][8])</del>())[]</code> </td><td class="col1"> foo is an array of an array of 8 pointer to <strong>pointer to</strong> char </td>
  334. </tr>
  335. <tr class="row7">
  336. <td class="col0"> <code><del>char</del> *(*<del>(**foo [][8])()</del>)[]</code> </td><td class="col1"> foo is an array of an array of 8 pointer to pointer to <strong>function returning</strong> char </td>
  337. </tr>
  338. <tr class="row8">
  339. <td class="col0"> <code><del>char</del> *<del>(*(**foo [][8])())</del>[]</code> </td><td class="col1"> foo is an array of an array of 8 pointer to pointer to function returning <strong>pointer to</strong> char </td>
  340. </tr>
  341. <tr class="row9">
  342. <td class="col0"> <code><del>char</del> *<del>(*(**foo [][8])())[]</del></code> </td><td class="col1"> foo is an array of an array of 8 pointer to pointer to function returning pointer to <strong>array of</strong> char </td>
  343. </tr>
  344. <tr class="row10">
  345. <td class="col0"> <code><del>char *(*(**foo [][8])())[]</del></code> </td><td class="col1"> foo is an array of an array of 8 pointer to pointer to function returning pointer to array of <strong>pointer to</strong> char </td>
  346. </tr>
  347. </table></div>
  348. <!-- EDIT9 TABLE [4772-6014] -->
  349. <p>
  350. For a much more detailed explanation, see Steve Friedl&#039;s excellent description of how to read C declarations at <a href="http://www.unixwiz.net/techtips/reading-cdecl.html" class="urlextern" title="http://www.unixwiz.net/techtips/reading-cdecl.html" rel="nofollow">http://www.unixwiz.net/techtips/reading-cdecl.html</a>.
  351. </p>
  352. </div>
  353. <!-- EDIT7 SECTION "Reading Type Declarations" [3767-] --></div>
  354. </body>
  355. </html>