mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2024-12-28 05:40:43 +08:00
Update item3.md
update formatting in lvalue-reference-to-non-const and lvalue-references-to-const
This commit is contained in:
parent
b7bd82fccd
commit
3f18cacbc1
@ -104,7 +104,7 @@ decltype(auto) myWidget2 = cw; //decltype类型推导
|
|||||||
template<typename Container, typename Index>
|
template<typename Container, typename Index>
|
||||||
decltype(auto) authAndAccess(Container& c, Index i);
|
decltype(auto) authAndAccess(Container& c, Index i);
|
||||||
````
|
````
|
||||||
容器通过传引用的方式传递非常量左值引用(lvalue-reference-to-non-`const`),因为返回一个引用允许用户可以修改容器。但是这意味着在不能给这个函数传递右值容器,右值不能被绑定到左值引用上(除非这个左值引用是一个const(lvalue-references-to-`const`),但是这里明显不是)。
|
容器通过传引用的方式传递非常量左值引用(lvalue-reference-to-non-**const**),因为返回一个引用允许用户可以修改容器。但是这意味着在不能给这个函数传递右值容器,右值不能被绑定到左值引用上(除非这个左值引用是一个const(lvalue-references-to-**const**),但是这里明显不是)。
|
||||||
|
|
||||||
公认的向`authAndAccess`传递一个右值是一个[edge case](https://en.wikipedia.org/wiki/Edge_case)(译注:在极限操作情况下会发生的事情,类似于会发生但是概率较小的事情)。一个右值容器,是一个临时对象,通常会在`authAndAccess`调用结束被销毁,这意味着`authAndAccess`返回的引用将会成为一个悬置的(dangle)引用。但是使用向`authAndAccess`传递一个临时变量也并不是没有意义,有时候用户可能只是想简单的获得临时容器中的一个元素的拷贝,比如这样:
|
公认的向`authAndAccess`传递一个右值是一个[edge case](https://en.wikipedia.org/wiki/Edge_case)(译注:在极限操作情况下会发生的事情,类似于会发生但是概率较小的事情)。一个右值容器,是一个临时对象,通常会在`authAndAccess`调用结束被销毁,这意味着`authAndAccess`返回的引用将会成为一个悬置的(dangle)引用。但是使用向`authAndAccess`传递一个临时变量也并不是没有意义,有时候用户可能只是想简单的获得临时容器中的一个元素的拷贝,比如这样:
|
||||||
````cpp
|
````cpp
|
||||||
|
Loading…
Reference in New Issue
Block a user