程序运行正常,但Eclipse调试器卡住了。

3
这个程序类似于这样:
class A {
    const A& a;
public:
    A(const A& a) : a(a) {}
};

int main(int argc, char** argv) {

    A a(a);

}

程序可以编译和运行。然而,有时Eclipse调试器会冻结。注释掉"A a(a)"这一行可以解决问题。
这行代码"A a(a)"是否存在危险性?

2
相关链接:https://dev59.com/-FwY5IYBdhLWcg3wcXeE请仅返回翻译后的文本。 - scohe001
5
听起来像是你的调试器出现了问题,不停地试图解开这个神秘的"A"链,却没有意识到它正在追逐自己的尾巴。 - Quentin
当实例还没有完成构造时,如何使用相同的实例构造一个实例? - Thomas Matthews
我无法复制锁定,但是尽管自我复制构造在语法上是合法的,但从逻辑上讲并不是一个好主意。需要一个 [mcve] 真正找到问题的根源。 - user4581301
1个回答

0

这是无限递归,显然一个类的构造函数一遍又一遍地调用自己。 如果你使用gcc编译器,你会看到如下警告:

warning: variable 'a' is uninitialized when used within its own
  initialization [-Wuninitialized]
A a(a);

这就像你在调用这个函数:

void assign(int& a){
    assign(a);
}
int main(){
    int a;
    assign(a);
    return 0;
}

没有编译错误,只是逻辑错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接