What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:programming:cpp:cpp_primer:16_template [2024/01/14 13:46] – ↷ 页面programming:cpp:cpp_primer:16_template被移动至cs:programming:cpp:cpp_primer:16_template codingharecs:programming:cpp:cpp_primer:16_template [2024/11/17 04:38] (当前版本) – [使用 std::forward] codinghare
行 917: 行 917:
   * 接受类型为**普通左值**的 argument 时,推断类型是左值引用 ''T&''   * 接受类型为**普通左值**的 argument 时,推断类型是左值引用 ''T&''
   * 接收类型为**常量左值**的 argument 时,推断类型是**常量左值引用** ''const T&''   * 接收类型为**常量左值**的 argument 时,推断类型是**常量左值引用** ''const T&''
-\\ <html><div align="center"> <img src="/_media/programming/cpp/cpp_primer/rvalue_dec.svg width="500"> </div> </html> \\ +\\ {{ :cs:programming:cpp:cpp_primer:rvalue_dec.svg?500 |}} \\ 
 ==T&& 可以接收左值的原因:引用折叠== ==T&& 可以接收左值的原因:引用折叠==
 模板右值引用类型的函数可以接收左值的原因是因为**引用折叠**(//Reference Collapsing// )。考虑以下过程: 模板右值引用类型的函数可以接收左值的原因是因为**引用折叠**(//Reference Collapsing// )。考虑以下过程:
行 1035: 行 1035:
 </code> </code>
 上面是一个函数 ''flip1'',内嵌一个打印函数 ''f'',会将接受的参数 ''t1'',''t2'' 交换顺序进行打印,并对 ''t2'' 对应的参数进行自增。但实际上,该程序无法达到预期的效果,因为 ''t'' 对应的 argument ''j'' 在转发的过程中发生了变化: 上面是一个函数 ''flip1'',内嵌一个打印函数 ''f'',会将接受的参数 ''t1'',''t2'' 交换顺序进行打印,并对 ''t2'' 对应的参数进行自增。但实际上,该程序无法达到预期的效果,因为 ''t'' 对应的 argument ''j'' 在转发的过程中发生了变化:
-\\ \\ \\ <html><div align="center"> <img src="/_media/programming/cpp/cpp_primer/forward_1.svg width="500"> </div> </html> \\ \\+\\ \\ \\ {{ :cs:programming:cpp:cpp_primer:forward_1.svg?500 |}} \\ \\
   * 由于 ''t1'' 以复制的方式接收的是左值 ''j'',因此 ''T1''被推断为 int   * 由于 ''t1'' 以复制的方式接收的是左值 ''j'',因此 ''T1''被推断为 int
   * 那么 ''flip1'' 实际上实例化为:   * 那么 ''flip1'' 实际上实例化为:
行 1091: 行 1091:
     * 返回的类型是 ''std::forward<T>'',也就是 ''T&&''     * 返回的类型是 ''std::forward<T>'',也就是 ''T&&''
 \\  \\ 
-<html><div align="center"> <img src="/_media/programming/cpp/cpp_primer/forward_3_4.svg width="500"> </div> </html>+{{ :cs:programming:cpp:cpp_primer:forward_3_4.svg?500 |}}
  \\ \\   \\ \\ 
 <WRAP center round box 100%> <WRAP center round box 100%>
行 1445: 行 1445:
 类模板也可以针对特定的类型进行特化。 类模板也可以针对特定的类型进行特化。
 ==实例:使用类模板特化生成 Sales_data 类型的哈希函数== ==实例:使用类模板特化生成 Sales_data 类型的哈希函数==
-在[[programming:cpp:cpp_primer:11_acontainers#使用无序容器|无序关联容器]]一章中有过自定义哈希值的计算方法。当时采用了提供哈希函数的方式;另一种方法是**对标准库的哈希函数进行特化**。\\ \\ +在[[cs:programming:cpp:cpp_primer:11_acontainers#使用无序容器|无序关联容器]]一章中有过自定义哈希值的计算方法。当时采用了提供哈希函数的方式;另一种方法是**对标准库的哈希函数进行特化**。\\ \\ 
 特化标准库的哈希函数有几个准备工作: 特化标准库的哈希函数有几个准备工作:
   * 需要重载调用运算符 ''()'',该运算符接收容器的 key 作为参数,并返回 ''size_t'' 类型的返回值   * 需要重载调用运算符 ''()'',该运算符接收容器的 key 作为参数,并返回 ''size_t'' 类型的返回值