C++ 从函数参数中的临时值调用复制构造函数时

C++ 从函数参数中的临时值调用复制构造函数时,c++,C++,我有一个问题,为什么下面的代码片段会导致堆栈溢出 class vector { private: public: vector (const vector& rhs) { /* _b = (rhs.size() == 0) ? nullptr : new value_type[rhs.size()]; _e = _b + rhs.size()); copy(rhs.begin(), rhs.end(), _b)

我有一个问题,为什么下面的代码片段会导致堆栈溢出

class vector {
private:

public:

    vector (const vector& rhs) {
         /*
        _b = (rhs.size() == 0) ? nullptr : new value_type[rhs.size()];
        _e = _b + rhs.size());
        copy(rhs.begin(), rhs.end(), _b);
        } */
   }
那么,为什么代码会从导致堆栈溢出的参数vector(const vector RHS)中删除“&”


不是复制构造函数。复制构造函数将对被复制的类型进行(
const
)引用。但是,在您的示例中,参数
RHS
本身需要复制。

我们需要更多的代码来诊断它。看来有人在Quora的所有地方都回答了这个问题,顺便问一下,您能告诉我们您是如何称呼它的吗?编写这样的“构造函数”是非法的,会产生
错误:构造函数无效;你的意思可能是‘A(const A&)’A(const A x){}
。还是使用旧版本的C++?哦,不用介意最后一个评论……它是针对这个问题的早期版本。现在我们可以回答了,谢谢!实际上,等等。。。。仍然没有足够的信息…谢谢。我根据您的注释编辑了我的代码段。这样的“构造函数”没有引用参数,无法为我编译。因此,虽然它不是一个复制构造函数,但我认为更大的问题是代码没有编译。不知道OP是如何得到无限循环的。这里有点奇怪。它是为你编译的吗?@changnj这不是评论,而是对你最初问题的回答。您声称使用“
A(const A RHS){…}
”作为复制构造函数会导致堆栈溢出。你不能简单地改变你的问题,仍然声称得到同样的结果。我投票结束,因为不清楚你在问什么。谢谢大家。我发现我在复制构造函数中按值传递一个参数,对复制构造函数的调用将调用复制构造函数,这将成为一个非终止调用链。
A(const A RHS) { ...}