Tob*_*ull 16 c++ sequence-points move-semantics c++11
假设一个具有以下原型的功能
template<typename T>
std::unique_ptr<T> process_object(std::unique_ptr<T> ptr);
Run Code Online (Sandbox Code Playgroud)
该函数可以返回传递给它的对象(移动版本)或完全不同的对象.
使用此函数是合法的C++如下吗?
std::unique_ptr<Widget> pw(new Widget());
pw = process_object(std::move(pw));
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,有一个C/C++规则禁止在一个完整的表达式中多次修改一个对象.这条规则适用于此吗?如果是的话,有没有办法在一行中以不同的方式表达这个习语?
如果一个人std::unique_ptr被鄙视取代std::auto_ptr怎么办?
Mik*_*our 20
使用此函数是合法的C++如下吗?
是的,没关系.
如果我没记错的话,有一个C/C++规则禁止在一个完整的表达式中多次修改一个对象.
不完全的.您不能多次修改对象(或修改它并使用其值)以及无序访问.
这条规则适用于此吗?
否.在函数调用之前对函数参数进行排序,并在赋值之前对其进行排序.所以这两个访问都是有序的,一切都很好.
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |