gpt4 book ai didi

c++ - 函数中的无限递归

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:28 26 4
gpt4 key购买 nike

在这样的片段中:

struct A;
struct B {
B(int k): k_(k) { }
int k_;
operator A() const;
};

struct A {
B k_;
};

B::operator A() const
{
return A(B(this->k_));
}

clang 产生警告(在转换运算符中):

 warning: all paths through this function will call itself [-Winfinite-recursion]

因此当我这样做时:

int main()
{
A a = B(1);
}

程序因段错误而失败。

谁能解释一下为什么有无限递归。

最佳答案

A a = B(1);

让我们首先通过采用int k 的构造函数构造一个带有B(1)B 对象。

现在,让我们使用用户定义的转换运算符将此 B 转换为 A 以使其适合 a。这将返回 A(B(this->k_));

让我们使用新构造的 B 对象构造一个 A 对象,该对象使用相同的 k_。唯一合适的构造函数是需要 const A&/A&& 的复制构造函数/移动构造函数。我们可以使用用户定义的转换运算符将新构造的 B 对象转换为 A,让我们这样做。

这将构造A(B(this->k_));再次

这是你的无限递归。

关于c++ - 函数中的无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com