std::move 的无限递归

Infinite recursion with std::move

我有一个模仿 std::vector 的 class。 为此,我想要一个接受左值和右值的函数 push_back。

    void push_back(const T& obj) {
        push_back(std::move(obj));
    }

    void push_back(T&& obj) {
        buffer[numElements] = obj;
        numElements = numElements+1>=Sz-1 ? Sz-1 : numElements+1;

    }

但是,当我由于移动而传递左值时,这段代码以无限递归结束,它调用了错误的函数(我希望 const T& obj 函数调用 T&& obj 重载)。

std::move 的文档说

It is exactly equivalent to a static_cast to an rvalue reference type.

我错过了什么?

问题是,在

void push_back(const T& obj) {
    push_back(std::move(obj));
}

你用 std::move 获得了 const T&&

所以唯一可行的候选者是void push_back(const T&),所以无限递归调用。