看不懂的类型转换(有待解决)

看不懂的类型转换,如下两种转换h1,h2都经过HowMany(int a =0 ) : int_class(a) {}这个函数,成员变量int_class被赋值5。

#include <iostream> 
#include <string> 
using namespace std;

class HowMany { 
    int int_class; 
public: 
    HowMany(int a =0 ) : int_class(a) {} 
    HowMany(const HowMany& b) : int_class(b.int_class)
    { 
        cout << "output HowMany(HowMany&)" <<endl; 
    } 
    void print()
    { 
        cout <<"int_class = " << int_class <<endl; 
    } 
    ~HowMany()
    { 
        cout << "~HowMany()" <<endl; 
    } 
}; 
int main() { 
    HowMany h1=5;//为什么不能通过隐式类型转换,将int型转换为HowMany型,然后调用复制构造函数,将
//临时对象复制给h1 ? 

    int i = 5; //第二种情况
    HowMany h2=i;

有人说:HowMany h1=i; 对于这样的表达式,首先要肯定的是会调用拷贝构造函数的;这点是毋庸置疑的。
由于HowMany类有个单参数构造函数,所以,在程序中如果碰到这种参数,但上下文中要求在这个位置上是一个HowMany的实例,那么编译器将会帮你调用这个单参数构造函数,这里即是这样。
而HowMany h1 = i; 这行代码是对h1的声明定义和初识化,并且是利用i生成的临时的HowMany对象来作为参数调用拷贝构造函数初始化对象h1
另外一种说法:这里实际上调用的还是第一个构造函数。看编译器怎么实现了。

posted on 2012-05-27 21:17  在旅途  阅读(151)  评论(0编辑  收藏  举报

导航