This commit is contained in:
y1yang0 2024-05-19 08:14:18 +00:00
parent 684a836631
commit aead807456
5 changed files with 8 additions and 8 deletions

View File

@ -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,

View File

@ -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&lt;std::unordered_map&lt;std::string, std::string&gt;&gt;</code>这样的类型,它可能会让你患上腕管综合征的风险大大增加。</p>
<p>避免上述医疗悲剧也很简单,引入<code>typedef</code>即可:</p>
<pre><code class="language-cpp">typedef

View File

@ -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&lt;std::unordered_map&lt;std::string, std::string&gt;&gt;</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