public:it:cplusplus:effective_modern_cplusplus

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
public:it:cplusplus:effective_modern_cplusplus [2022/07/11 11:04] – [章节5. 右值引用、移动语义和完美转发] oakfirepublic:it:cplusplus:effective_modern_cplusplus [2022/07/11 14:44] (当前版本) – [章节3. 转向现代C++] oakfire
行 101: 行 101:
 ===  » 条目12. 声明覆盖函数时,使用修饰词 override === ===  » 条目12. 声明覆盖函数时,使用修饰词 override ===
   * 区分覆盖和重载的区别。   * 区分覆盖和重载的区别。
-  * c++11 比 c++98 对虚函数覆盖多了一条限定:覆盖函数的引用限定词必须与基类相同。+  * c++11 比 c++98 对虚函数覆盖多了一条限定:覆盖函数的引用限定词必须与基类相同。<code cpp> 
 +class Widget { 
 +public: 
 + … 
 + void doWork() &;      // this version of doWork applies only when *this is an lvalue 
 + void doWork() &&;     // this version of doWork applies only when *this is an rvalue 
 +};  
 +… 
 +Widget makeWidget();   // factory function (returns rvalue) 
 +Widget w;              // normal object (an lvalue) 
 +w.doWork();            // calls Widget::doWork for lvalues 
 +makeWidget().doWork(); // calls Widget::doWork for rval 
 +</code>
   * ''override'' 修饰词可规避因细微声明差异导致未覆盖。   * ''override'' 修饰词可规避因细微声明差异导致未覆盖。
 ===  » 条目13. 优先使用 const 迭代器 const_iterator === ===  » 条目13. 优先使用 const 迭代器 const_iterator ===
行 235: 行 247:
     * 变量声明为 ''auto&&''     * 变量声明为 ''auto&&''
   * 如果类型声明格式不是标准的''type&&'',或者不存在类型推导,那么 ''type&&'' 为右值引用:<code cpp>   * 如果类型声明格式不是标准的''type&&'',或者不存在类型推导,那么 ''type&&'' 为右值引用:<code cpp>
-void f(Widget&& param); // rvalue reference +void f(Widget&& param);         // rvalue reference 
-Widget&& var1 = Widget(); // rvalue reference +Widget&& var1 = Widget();       // rvalue reference 
-auto&& var2 = var1; // not rvalue reference+auto&& var2 = var1;             // not rvalue reference
 template<typename T> template<typename T>
 void f(std::vector<T>&& param); // rvalue reference void f(std::vector<T>&& param); // rvalue reference
 template<typename T> template<typename T>
-void f(T&& param); // not rvalue reference+void f(T&& param);              // not rvalue reference
 </code> </code>
 +  * 通值引用如果是被右值初始化,那么就转为右值引用,左值则转为左值引用(详见类型推导)。
 +=== » 条目25 std::move 使用在右值引用,std::forward 使用在通值引用 ===
 +  * 要利用形参的右值性时,右值引用的形参使用 ''std::move'', 通值引用的形参使用 ''std::forward''
 +  * 一个函数内想多次利用同一个对象的右值性时,只在最后一次使用 ''std::mvoe'', ''std::forward''(因为使用之后该对象就会失效)。
 +  * 按值返回的函数要返回右值引用或通值引用时,同样使用 ''std::move'' 或 ''std::forward''
 +  * 由于标准规定编译器存在返回值优化(return value optimization,RVO)以及在不优化场景下将 ''std::move'' 隐式应用于返回的局部对象,所以,不需要对要返回的局部对象(或值形参)手动使用 ''std::move'' 或 ''std::forward''
 ==== 翻译对照 ==== ==== 翻译对照 ====
 <WRAP tablewidth 50% > <WRAP tablewidth 50% >
-^ 英                         ^ 汉       ^ 备注                                +^ 英                        ^ 汉            ^ 备注                              
-| argument                  | 实参      |                                   | +| argument                  | 实参          |                                   | 
-| parameter                 | 形参/参数   |                                   |+| parameter                 | 形参/参数     |                                   |
 | basic guarantee           | 基本异常保障  | basic exception safty guarantee   | | basic guarantee           | 基本异常保障  | basic exception safty guarantee   |
-| strong guarantee          | 强异常保障   | strong exception safty guarantee +| strong guarantee          | 强异常保障    | strong exception safty guarantee 
-| built-in pointer          | 内置指针    | 相对于智能指针的原指针概念                     +| built-in pointer          | 内置指针      | 相对于智能指针的原指针概念        
-| raw pointer               | 原生指针                                       +| raw pointer               | 原生指针                                        
-| universal reference       | 通值引用    | 相对“左值引用”、“右值引用”来说                 +| universal reference       | 通值引用      | 相对“左值引用”、“右值引用”来说    
-| scoped enums              | 限定域枚举   |                                   |+| scoped enums              | 限定域枚举    |                                   |
 | unscoped enums            | 非限定域枚举  |                                   | | unscoped enums            | 非限定域枚举  |                                   |
-| forward-declared          | 前置声明    |                                   | +| forward-declared          | 前置声明      |                                   | 
-| override                  | 覆盖      |                                   | +| override                  | 覆盖                                            | 
-| maximally  generic  code  | 最泛化代码   |                                   |+| overload                  | 重载          |                                   | 
 +| maximally  generic  code  | 最泛化代码    |                                   |
 | special member function   | 特制成员函数  |                                   | | special member function   | 特制成员函数  |                                   |
-|                                   |                                   | +|                                         |                                   | 
-|                                   |                                   | +|                                         |                                   | 
-|                                   |                                   | +|                                         |                                   | 
-|                                   |                                   |+|                                         |                                   |
 </WRAP> </WRAP>
  • public/it/cplusplus/effective_modern_cplusplus.1657508653.txt.gz
  • 最后更改: 2022/07/11 11:04
  • oakfire