高质量程序设计指南c++/c语言(5)--构造函数和值传递惹的祸
#include<iostream> using namespace std; class A; void bad_fun(A a); class A { public: A(){} A(const A &a) { cout << "A" << endl; bad_fun(a); } }; void bad_fun(A a) { } int main(void) { A a; bad_fun(a); return 0; }
bad_fun函数与拷贝构造函数互相调用,上面的代码会一致递归运行下去,直到栈溢出。
我在写上面代码的时候,出现了一段小插曲
#include<iostream> using namespace std; class A; void bad_fun(A a) { } class A { public: A(){} A(const A &a) { cout << "A" << endl; bad_fun(a); } }; int main(void) { // A a; // bad_fun(a); return 0; }
上面的代码会出现编译错误。
void bad_fun(A a) { }
这时,函数bad_fun需要知道参数A a的具体类型,所以A的定义应该在此函数之前完成。