我有一个类模仿std::向量。为此,我希望有一个同时接受lvalue和rvalue的函数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;
}然而,当我传递一个由于移动而产生的lvalue时,这段代码以一个没完没了的递归结束,它调用了错误的函数(我希望const T& obj函数调用T&& obj重载)。
性病的医生::移动说
它与static_cast完全等价于rvalue引用类型。
我遗漏了什么?
发布于 2020-11-22 09:15:46
问题是,在
void push_back(const T& obj) {
push_back(std::move(obj));
}const T&&和std::move在一起。
因此,只有可行的候选是void push_back(const T&),因此无限递归调用。
https://stackoverflow.com/questions/64952412
复制相似问题