#include <iostream>
#include <cstdlib>

using namespace std;
class clc{
public:
 int m,n;
 clc(int i)
 {
 cout<<"clc with para addr:"<<this<<endl;
 m = 15;
 cout<<"after copy "<<m<<endl;
 }

 clc(){
 n = 0;
 cout<<"clc no para addr:"<<this<<endl;
 clc(this->n);
 }
};

int main(void)
{
 clc t;
 cout<<t.m<<" "<<t.n<<endl;
 return 0;
}

运行结果如下

ret

看来第二个构造函数又创建了一个对象,因此外层的m的值是未定义的,不过还没在书上找到一些官方解释

可以参考下这个  http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3

A slightly less incorrect answer is: “you can’t call a constructor on an object”, and this conveys the main idea. There is no object before the constructor has done its job. The constructor transforms raw storage into a useful object.

明天再实验下在里面调用placement new的效果