2

我想“模拟”该std::move()函数以评估其对我编写的 C++ 库的(积极)性能影响。

我已经std::move()广泛使用,我想避免grep到处 ping 来删除它。用身份函数替换它的最佳方法是什么?我正在用gcc.

4

2 回答 2

1

这应该“有效”,但实际上是未定义的行为:

// 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;
    }
}

这不会捕获隐式移动或在标准库本身内部完成的移动。我建议只删除您对 ; 的所有使用std::move。它更干净,实际上是允许的。:P

于 2013-10-03T10:02:18.383 回答
0

我相当肯定没有办法实现这一点,除了屠杀你自己的代码来删除你想要分析的大型对象上的所有移动构造函数。您可能还会发现将非右值引用传递给期望右值引用的函数时会遇到问题。

所以我建议不要打扰并接受你的代码很可能更快并且对此感到满意。

实际上,我大约一年前就想尝试一下,但一直没有找到方法。

于 2013-10-03T09:52:25.867 回答