zoukankan      html  css  js  c++  java
  • 看不懂的类型转换(有待解决)

    看不懂的类型转换,如下两种转换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
    另外一种说法:这里实际上调用的还是第一个构造函数。看编译器怎么实现了。

  • 相关阅读:
    [转]ARM平台下独占访问指令LDREX和STREX
    ARM MMU
    在字符串中查找子字符串并提取它
    获得字符串的长度
    连接字符串
    循环用于迭代数组中的项目
    循环的标准
    if ... else 语句
    添加一个图像切换器
    css 中的z-index
  • 原文地址:https://www.cnblogs.com/lionfight/p/2520512.html
Copyright © 2011-2022 走看看