mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-01-01 07:50:15 +08:00
deploy: 14d64d6dfc
This commit is contained in:
parent
684a836631
commit
aead807456
@ -210,7 +210,7 @@ enum class Color; //没问题
|
||||
};
|
||||
</code></pre>
|
||||
<p>这里值的范围从<code>0</code>到<code>0xFFFFFFFF</code>。除了在不寻常的机器上(比如一个<code>char</code>至少有32bits的那种),编译器都会选择一个比<code>char</code>大的整型类型来表示<code>Status</code>。</p>
|
||||
<p>为了高效使用内存,编译器通常在确保能包含所有枚举值的前提下为<code>enum</code>选择一个最小的底层类型。在一些情况下,编译器将会优化速度,舍弃大小,这种情况下它可能不会选择最小的底层类型,而是选择对优化大小有帮助的类型。为此,C++98只支持<code>enum</code>定义(所有枚举名全部列出来);<code>enum</code>声明是不被允许的。这使得编译器能在使用之前为每一个<code>enum</code>选择一个底层类型。</p>
|
||||
<p>为了高效使用内存,编译器通常在确保能包含所有枚举值的前提下为<code>enum</code>选择一个最小的底层类型。在一些情况下,编译器将会优化速度,舍弃大小,这种情况下它可能不会选择最小的底层类型,但它们当然希望能够针对大小进行优化。为此,C++98只支持<code>enum</code>定义(所有枚举名全部列出来);<code>enum</code>声明是不被允许的。这使得编译器能在使用之前为每一个<code>enum</code>选择一个底层类型。</p>
|
||||
<p>但是不能前置声明<code>enum</code>也是有缺点的。最大的缺点莫过于它可能增加编译依赖。再次考虑<code>Status</code> <code>enum</code>:</p>
|
||||
<pre><code class="language-cpp">enum Status { good = 0,
|
||||
failed = 1,
|
||||
|
@ -139,8 +139,8 @@
|
||||
|
||||
<div id="content" class="content">
|
||||
<main>
|
||||
<h2 id="条款九优先考虑别名声明而非typedefs"><a class="header" href="#条款九优先考虑别名声明而非typedefs">条款九:优先考虑别名声明而非<code>typedef</code>s</a></h2>
|
||||
<p><strong>Item 9: Prefer alias declarations to <code>typedef</code>s</strong></p>
|
||||
<h2 id="条款九优先考虑别名声明而非typedef"><a class="header" href="#条款九优先考虑别名声明而非typedef">条款九:优先考虑别名声明而非<code>typedef</code></a></h2>
|
||||
<p><strong>Item 9: Prefer alias declarations to <code>typedef</code></strong></p>
|
||||
<p>我相信每个人都同意使用STL容器是个好主意,并且我希望<a href="../4.SmartPointers/item18.html">Item18</a>能说服你让你觉得使用<code>std:unique_ptr</code>也是个好主意,但我猜没有人喜欢写上几次 <code>std::unique_ptr<std::unordered_map<std::string, std::string>></code>这样的类型,它可能会让你患上腕管综合征的风险大大增加。</p>
|
||||
<p>避免上述医疗悲剧也很简单,引入<code>typedef</code>即可:</p>
|
||||
<pre><code class="language-cpp">typedef
|
||||
|
@ -1363,8 +1363,8 @@ auto result3 = lockAndCall(f3, f3m, nullptr); //没问题
|
||||
<li>优先考虑<code>nullptr</code>而非<code>0</code>和<code>NULL</code></li>
|
||||
<li>避免重载指针和整型</li>
|
||||
</ul>
|
||||
<div style="break-before: page; page-break-before: always;"></div><h2 id="条款九优先考虑别名声明而非typedefs"><a class="header" href="#条款九优先考虑别名声明而非typedefs">条款九:优先考虑别名声明而非<code>typedef</code>s</a></h2>
|
||||
<p><strong>Item 9: Prefer alias declarations to <code>typedef</code>s</strong></p>
|
||||
<div style="break-before: page; page-break-before: always;"></div><h2 id="条款九优先考虑别名声明而非typedef"><a class="header" href="#条款九优先考虑别名声明而非typedef">条款九:优先考虑别名声明而非<code>typedef</code></a></h2>
|
||||
<p><strong>Item 9: Prefer alias declarations to <code>typedef</code></strong></p>
|
||||
<p>我相信每个人都同意使用STL容器是个好主意,并且我希望<a href="3.MovingToModernCpp/../4.SmartPointers/item18.html">Item18</a>能说服你让你觉得使用<code>std:unique_ptr</code>也是个好主意,但我猜没有人喜欢写上几次 <code>std::unique_ptr<std::unordered_map<std::string, std::string>></code>这样的类型,它可能会让你患上腕管综合征的风险大大增加。</p>
|
||||
<p>避免上述医疗悲剧也很简单,引入<code>typedef</code>即可:</p>
|
||||
<pre><code class="language-cpp">typedef
|
||||
@ -1543,7 +1543,7 @@ enum class Color; //没问题
|
||||
};
|
||||
</code></pre>
|
||||
<p>这里值的范围从<code>0</code>到<code>0xFFFFFFFF</code>。除了在不寻常的机器上(比如一个<code>char</code>至少有32bits的那种),编译器都会选择一个比<code>char</code>大的整型类型来表示<code>Status</code>。</p>
|
||||
<p>为了高效使用内存,编译器通常在确保能包含所有枚举值的前提下为<code>enum</code>选择一个最小的底层类型。在一些情况下,编译器将会优化速度,舍弃大小,这种情况下它可能不会选择最小的底层类型,而是选择对优化大小有帮助的类型。为此,C++98只支持<code>enum</code>定义(所有枚举名全部列出来);<code>enum</code>声明是不被允许的。这使得编译器能在使用之前为每一个<code>enum</code>选择一个底层类型。</p>
|
||||
<p>为了高效使用内存,编译器通常在确保能包含所有枚举值的前提下为<code>enum</code>选择一个最小的底层类型。在一些情况下,编译器将会优化速度,舍弃大小,这种情况下它可能不会选择最小的底层类型,但它们当然希望能够针对大小进行优化。为此,C++98只支持<code>enum</code>定义(所有枚举名全部列出来);<code>enum</code>声明是不被允许的。这使得编译器能在使用之前为每一个<code>enum</code>选择一个底层类型。</p>
|
||||
<p>但是不能前置声明<code>enum</code>也是有缺点的。最大的缺点莫过于它可能增加编译依赖。再次考虑<code>Status</code> <code>enum</code>:</p>
|
||||
<pre><code class="language-cpp">enum Status { good = 0,
|
||||
failed = 1,
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user