PageRenderTime 29ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/www.cppreference.com/wiki/tw/data_types

https://github.com/tsgates/cclookup
#! | 390 lines | 364 code | 26 blank | 0 comment | 0 complexity | 24863f96cbbb3edaf7c3ee56ce84140e 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="tw"
  4. lang="tw" dir="ltr">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>tw:data_types</title>
  8. <meta name="generator" content="DokuWiki" />
  9. <meta name="robots" content="index,follow" />
  10. <meta name="date" content="2010-11-10T21:49:03-0800" />
  11. <meta name="keywords" content="tw,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/tw/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=tw" />
  17. <link rel="alternate" type="text/html" title="Plain HTML" href="http://www.cppreference.com/wiki/_export/xhtml/tw/data_types" />
  18. <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://www.cppreference.com/wiki/_export/raw/tw/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='tw';var JSINFO = {"id":"tw:data_types","namespace":"tw"};
  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_資料型態" class="toc">C++ 資料型態</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_資料型態" id="c_資料型態">C++ 資料型態</a></h2>
  48. <div class="level2">
  49. <p>
  50. C++ programmers have access to the five data types for C: void, int, float, double, and char.
  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">無資料型態(但是如為 void* 這種指標時, 則為泛用指標)</td>
  58. </tr>
  59. <tr class="row2">
  60. <td class="col0"><code>int</code></td><td class="col1">整數</td>
  61. </tr>
  62. <tr class="row3">
  63. <td class="col0"><code>float</code></td><td class="col1">浮點數</td>
  64. </tr>
  65. <tr class="row4">
  66. <td class="col0"><code>double</code></td><td class="col1">雙精度浮點數</td>
  67. </tr>
  68. <tr class="row5">
  69. <td class="col0"><code>char</code></td><td class="col1">字元</td>
  70. </tr>
  71. </table></div>
  72. <!-- EDIT2 TABLE [123-329] -->
  73. <p>
  74. In addition, C++ defines two more: <code>bool</code> and <code>wchar_t</code>.
  75. </p>
  76. <div class="table sectionedit3"><table class="inline">
  77. <tr class="row0">
  78. <th class="col0">型態(Type)</th><th class="col1">描述(Description)</th>
  79. </tr>
  80. <tr class="row1">
  81. <td class="col0"><code>bool</code></td><td class="col1">邏輯值, true or false</td>
  82. </tr>
  83. <tr class="row2">
  84. <td class="col0"><code>wchar_t</code></td><td class="col1">Unicode字元(wide character)</td>
  85. </tr>
  86. </table></div>
  87. <!-- EDIT3 TABLE [393-507] -->
  88. </div>
  89. <!-- EDIT1 SECTION "C++ 資料型態" [1-508] -->
  90. <h3 class="sectionedit4"><a name="type_modifiers" id="type_modifiers">Type Modifiers</a></h3>
  91. <div class="level3">
  92. <p>
  93. 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):
  94. </p>
  95. <div class="table sectionedit5"><table class="inline">
  96. <tr class="row0">
  97. <th class="col0" colspan="4">integer types</th>
  98. </tr>
  99. <tr class="row1">
  100. <td class="col0" colspan="4"><code>bool</code></td>
  101. </tr>
  102. <tr class="row2">
  103. <td class="col0" colspan="4"><code>char</code></td>
  104. </tr>
  105. <tr class="row3">
  106. <td class="col0" colspan="4"><code>signed char</code></td>
  107. </tr>
  108. <tr class="row4">
  109. <td class="col0" colspan="4"><code>unsigned char</code></td>
  110. </tr>
  111. <tr class="row5">
  112. <td class="col0" colspan="4"><code>wchar_t</code></td>
  113. </tr>
  114. <tr class="row6">
  115. <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>
  116. </tr>
  117. <tr class="row7">
  118. <td class="col0" colspan="2"><code>unsigned short</code></td><td class="col2" colspan="2"><code>unsigned short int</code></td>
  119. </tr>
  120. <tr class="row8">
  121. <td class="col0"><code>int</code></td><td class="col1"><code>signed</code></td><td class="col2" colspan="2"><code>signed int</code></td>
  122. </tr>
  123. <tr class="row9">
  124. <td class="col0" colspan="2"><code>unsigned</code></td><td class="col2" colspan="2"><code>unsigned int</code></td>
  125. </tr>
  126. <tr class="row10">
  127. <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>
  128. </tr>
  129. <tr class="row11">
  130. <td class="col0" colspan="2"><code>unsigned long</code></td><td class="col2" colspan="2"><code>unsigned long int</code></td>
  131. </tr>
  132. <tr class="row12">
  133. <th class="col0" colspan="4">floating point types</th>
  134. </tr>
  135. <tr class="row13">
  136. <td class="col0" colspan="4"><code>float</code></td>
  137. </tr>
  138. <tr class="row14">
  139. <td class="col0" colspan="4"><code>double</code></td>
  140. </tr>
  141. <tr class="row15">
  142. <td class="col0" colspan="4"><code>long double</code></td>
  143. </tr>
  144. <tr class="row16">
  145. <th class="col0" colspan="4">optionally supported integer types</th>
  146. </tr>
  147. <tr class="row17">
  148. <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>
  149. </tr>
  150. <tr class="row18">
  151. <td class="col0" colspan="2"><code>unsigned long long</code></td><td class="col2" colspan="2"><code>unsigned long long in</code>t</td>
  152. </tr>
  153. </table></div>
  154. <!-- EDIT5 TABLE [828-1472] -->
  155. </div>
  156. <!-- EDIT4 SECTION "Type Modifiers" [509-1473] -->
  157. <h3 class="sectionedit6"><a name="type_sizes_and_ranges" id="type_sizes_and_ranges">Type Sizes and Ranges</a></h3>
  158. <div class="level3">
  159. <p>
  160. 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
  161. 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
  162. <code>doubles</code> are usually 64-bit. <code>bools</code> are often implemented as 8-bit data types.
  163. <code>long long</code> type is 64-bit. The cfloat (or float.h) header file defines the ranges for the floating types, the
  164. climits (or limits.h) - for the integer types.
  165. </p>
  166. <p>
  167. 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.
  168. </p>
  169. <div class="table sectionedit7"><table class="inline">
  170. <tr class="row0">
  171. <th class="col0"> Method or Constant </th><th class="col1"> Return </th><th class="col2"> Description </th>
  172. </tr>
  173. <tr class="row1">
  174. <td class="col0">is_specialized</td><td class="col1">bool</td><td class="col2"> </td>
  175. </tr>
  176. <tr class="row2">
  177. <td class="col0">radix</td><td class="col1">int</td><td class="col2">base of exponent</td>
  178. </tr>
  179. <tr class="row3">
  180. <td class="col0">digits</td><td class="col1">int</td><td class="col2">number of radix digits in mantissa</td>
  181. </tr>
  182. <tr class="row4">
  183. <td class="col0">digits10</td><td class="col1">int</td><td class="col2">number of base 10 digits in mantissa</td>
  184. </tr>
  185. <tr class="row5">
  186. <td class="col0">is_signed</td><td class="col1">bool</td><td class="col2"> </td>
  187. </tr>
  188. <tr class="row6">
  189. <td class="col0">is_integer</td><td class="col1">bool</td><td class="col2"> </td>
  190. </tr>
  191. <tr class="row7">
  192. <td class="col0">is_exact</td><td class="col1">bool</td><td class="col2"> </td>
  193. </tr>
  194. <tr class="row8">
  195. <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>
  196. </tr>
  197. <tr class="row9">
  198. <td class="col0">max()</td><td class="col1">&lt;type&gt;</td><td class="col2">largest number</td>
  199. </tr>
  200. <tr class="row10">
  201. <td class="col0">epsilon()</td><td class="col1">&lt;type&gt;</td><td class="col2">inherent representation error value</td>
  202. </tr>
  203. <tr class="row11">
  204. <td class="col0">round_error()</td><td class="col1">&lt;type&gt;</td><td class="col2">maximum rounding adjustment possible</td>
  205. </tr>
  206. <tr class="row12">
  207. <td class="col0">infinity()</td><td class="col1">&lt;type&gt;</td><td class="col2"> </td>
  208. </tr>
  209. <tr class="row13">
  210. <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>
  211. </tr>
  212. <tr class="row14">
  213. <td class="col0">signaling_NaN()</td><td class="col1">&lt;type&gt;</td><td class="col2">invalid number that signals floating point error</td>
  214. </tr>
  215. <tr class="row15">
  216. <td class="col0">denorm_min()</td><td class="col1">&lt;type&gt;</td><td class="col2"> </td>
  217. </tr>
  218. <tr class="row16">
  219. <td class="col0">min_exponent</td><td class="col1">int</td><td class="col2"> </td>
  220. </tr>
  221. <tr class="row17">
  222. <td class="col0">min_exponent10</td><td class="col1">int</td><td class="col2"> </td>
  223. </tr>
  224. <tr class="row18">
  225. <td class="col0">max_exponent</td><td class="col1">int</td><td class="col2"> </td>
  226. </tr>
  227. <tr class="row19">
  228. <td class="col0">max_exponent10</td><td class="col1">int</td><td class="col2"> </td>
  229. </tr>
  230. <tr class="row20">
  231. <td class="col0">has_infinity</td><td class="col1">bool</td><td class="col2"> </td>
  232. </tr>
  233. <tr class="row21">
  234. <td class="col0">has_quiet_NaN</td><td class="col1">bool</td><td class="col2"> </td>
  235. </tr>
  236. <tr class="row22">
  237. <td class="col0">has_signaling_NaN</td><td class="col1">bool</td><td class="col2"> </td>
  238. </tr>
  239. <tr class="row23">
  240. <td class="col0">has_denorm</td><td class="col1">&lt;type&gt;_denorm_style</td><td class="col2"> </td>
  241. </tr>
  242. <tr class="row24">
  243. <td class="col0">has_denorm_loss</td><td class="col1">bool</td><td class="col2"> </td>
  244. </tr>
  245. <tr class="row25">
  246. <td class="col0">is_iec559</td><td class="col1">bool</td><td class="col2">conforms to IEC-559</td>
  247. </tr>
  248. <tr class="row26">
  249. <td class="col0">is_bounded</td><td class="col1">bool</td><td class="col2"> </td>
  250. </tr>
  251. <tr class="row27">
  252. <td class="col0">is_modulo</td><td class="col1">bool</td><td class="col2"> </td>
  253. </tr>
  254. <tr class="row28">
  255. <td class="col0">traps</td><td class="col1">bool</td><td class="col2"> </td>
  256. </tr>
  257. <tr class="row29">
  258. <td class="col0">tinyness_before</td><td class="col1">bool</td><td class="col2"> </td>
  259. </tr>
  260. <tr class="row30">
  261. <td class="col0">round_style</td><td class="col1">float_round_style { round_to_nearest, }</td><td class="col2"> </td>
  262. </tr>
  263. </table></div>
  264. <!-- EDIT7 TABLE [2457-3531] -->
  265. <p>
  266. 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.
  267. </p>
  268. <pre class="cpp code cpp"> <span class="co2">#include &lt;limits&gt;</span>
  269. 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>
  270. 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>
  271. </div>
  272. <!-- EDIT6 SECTION "Type Sizes and Ranges" [1474-3957] -->
  273. <h3 class="sectionedit8"><a name="reading_type_declarations" id="reading_type_declarations">Reading Type Declarations</a></h3>
  274. <div class="level3">
  275. <p>
  276. Simple type declarations are easy to understand:
  277. </p>
  278. <pre class="cpp code cpp"> <span class="kw4">int</span> i</pre>
  279. <p>
  280. However, it can be tricky to parse more complicated type declarations:
  281. </p>
  282. <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>
  283. <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>
  284. <p>
  285. To understand the above declarations, follow three rules:
  286. </p>
  287. <ol>
  288. <li class="level1"><div class="li"> Start at the variable name (<code>d</code> or <code>foo</code> in the examples above)</div>
  289. </li>
  290. <li class="level1"><div class="li"> End with the data type (<code>double</code> or <code>char</code> above)</div>
  291. </li>
  292. <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>
  293. </li>
  294. </ol>
  295. <p>
  296. For example:
  297. </p>
  298. <div class="table sectionedit9"><table class="inline">
  299. <tr class="row0">
  300. <th class="col0">Expression</th><th class="col1">Meaning</th>
  301. </tr>
  302. <tr class="row1">
  303. <td class="col0"> <code>double **d[8];</code> </td><td class="col1"> </td>
  304. </tr>
  305. <tr class="row2">
  306. <td class="col0"> <code><del>double</del> **<del>d</del>[8];</code> </td><td class="col1"> <strong>d is double</strong> </td>
  307. </tr>
  308. <tr class="row3">
  309. <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>
  310. </tr>
  311. <tr class="row4">
  312. <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>
  313. </tr>
  314. <tr class="row5">
  315. <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>
  316. </tr>
  317. </table></div>
  318. <!-- EDIT9 TABLE [4554-4943] -->
  319. <p>
  320. Another example:
  321. </p>
  322. <div class="table sectionedit10"><table class="inline">
  323. <tr class="row0">
  324. <th class="col0">Expression</th><th class="col1">Meaning</th>
  325. </tr>
  326. <tr class="row1">
  327. <td class="col0"> <code>char *(*(**foo [][8])())[]</code> </td><td class="col1"> </td>
  328. </tr>
  329. <tr class="row2">
  330. <td class="col0"> <code><del>char</del> *(*(**<del>foo</del> [][8])())[]</code> </td><td class="col1"> <strong>foo is char</strong> </td>
  331. </tr>
  332. <tr class="row3">
  333. <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>
  334. </tr>
  335. <tr class="row4">
  336. <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>
  337. </tr>
  338. <tr class="row5">
  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 <strong>pointer to</strong> char </td>
  340. </tr>
  341. <tr class="row6">
  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 <strong>pointer to</strong> char </td>
  343. </tr>
  344. <tr class="row7">
  345. <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>
  346. </tr>
  347. <tr class="row8">
  348. <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>
  349. </tr>
  350. <tr class="row9">
  351. <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>
  352. </tr>
  353. <tr class="row10">
  354. <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>
  355. </tr>
  356. </table></div>
  357. <!-- EDIT10 TABLE [4963-6205] -->
  358. <p>
  359. 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> <a href="http://essaywritingservices.org/book-report.php" class="urlextern" title="http://essaywritingservices.org/book-report.php" rel="nofollow">online book reports</a> <a href="http://cvresumewriters.com/onlineresume.php" class="urlextern" title="http://cvresumewriters.com/onlineresume.php" rel="nofollow">certified resume writers</a>.
  360. </p>
  361. </div>
  362. <!-- EDIT8 SECTION "Reading Type Declarations" [3958-] --></div>
  363. </body>
  364. </html>