c++ - 如果参数是 T&& 类型,它是通过移动还是通过引用传递的?
问题描述
我希望这不是一个愚蠢的问题,我只是想确保我对此的理解是清楚的。
如果 RValue 引用接收到参数:
struct A { /* move and copy constructors here... */ };
template <class T> void f1(T&&) {
}
void demo()
{
f1(A());
f1(std::move<A>(A()));
}
在我看来,它是通过引用传递的,并且没有应用移动构造函数。
这是真的?我只是想确保这里没有复制省略或其他优化。
解决方案
正确的。构造函数只被调用,你用隐式或显式构造一个新对象的参数做一些事情。
演示函数中的第二行是不必要的:A()
已经是一个prvalue。
推荐阅读
- ruby-on-rails - Rails 部分黑客攻击:每个部分传递 2 条记录?还是更好的主意?
- r - 响应必须有 3 个或更多级别
- excel - 无法执行宏 - 找不到错误“76”路径
- python - 为什么 python 元组工厂函数比列表工厂函数慢?
- c++ - c++-使用BST实现策略表报错
- pandas - Pandas:如何获得每组中的前 2 行、中 2 行和后 2 行
- python-2.7 - 我正在使用 python 2.7。面临“END”关键字的问题
- django - 解决方案在 Django 中创建或更新静态页面
- python - 寻找最佳序列图解决方案
- python - 为同一对象的另一个实例更改“自我”?