模拟std::move()函数以评估其性能影响 我想“ STD::MOVER()/Cuff>函数来评估它对我所写的C++库的性能(积极)的影响。
我已经广泛使用了模拟std::move()函数以评估其性能影响 我想“ STD::MOVER()/Cuff>函数来评估它对我所写的C++库的性能(积极)的影响。,c++,testing,c++11,C++,Testing,C++11,我已经广泛使用了std::move(),我希望避免grepping到处删除它。用标识函数替换它的最佳方法是什么?我使用的是gcc我很确定,除了通过修改自己的代码来删除要评测的大型对象上的所有移动构造函数之外,没有其他方法可以实现这一点。您可能还会发现,将非右值引用传递给需要右值引用的函数时会出现问题 因此,我建议您不要费心,接受您的代码很可能更快,并对此感到满意 大约一年前,我真的想试试这个,但一直没有找到办法。这应该“管用”,但实际上这是一种未定义的行为: // Standard librar
std::move()
,我希望避免grep
ping到处删除它。用标识函数替换它的最佳方法是什么?我使用的是gcc
我很确定,除了通过修改自己的代码来删除要评测的大型对象上的所有移动构造函数之外,没有其他方法可以实现这一点。您可能还会发现,将非右值引用传递给需要右值引用的函数时会出现问题
因此,我建议您不要费心,接受您的代码很可能更快,并对此感到满意
大约一年前,我真的想试试这个,但一直没有找到办法。这应该“管用”,但实际上这是一种未定义的行为:
// Standard library includes must be above.
#define move not_a_move
namespace std {
template<typename T>
typename std::remove_lvalue_reference<T>::type const&
not_a_move(T&& x)
{
return x;
}
}
//标准库包含必须在上面。
#定义移动而不是移动
名称空间标准{
模板
typename std::remove\u lvalue\u reference::type const&
不移动(T&x)
{
返回x;
}
}
这不会捕获隐式移动或在标准库本身内部执行的移动。我建议您删除所有使用
std::move
;它更干净,实际上是允许的P删除所有显式std::move
调用不会阻止所有隐式调用移动构造函数。您知道move
和forward
实际上不会移动或向前移动吗?它们将输入重新解释为r值引用(有时用于转发
)。任何实际移动都发生在移动构造或-分配期间。试着用这些点来描述。@CTMacUser:我知道。对这就是为什么我认为删除我的std::move调用可能会导致实际调用的移动构造函数或-assignment更少,这有利于它们的“copy-”兄弟。我不想删除移动构造函数:有时我不能,因为它们在STL中。我想模拟我的std::move
调用,这实际上可能会阻止某些拷贝的发生。