对于32位的系统,int 与 long 是一样的都是4个字节!没有切割和提升!

解决方案 »

  1.   

    C++里有新的类型转换,你用的方法是C方法,C++是用static_cast<>,dynamic_cast<>等来进行类型转换的。
      

  2.   

    Phourm():
       哦,我是举个例子,明白我的意思就行了...vcmfc(菜虫):
       我看到的绝大多数程序例子,现在都是这样转换啊...
      

  3.   

    能提升吗?好象只是切割而已!
    long    a=(long)b; 有可能个a付一个错值(不一定等于b)!如果int 是2BYTE,long 是4BYTE,那么a的值高2两个BYTE的值不定!
    int    b2=(int)a2;
    确实是切割!b2的值等与a2的底两个BYTE!
    明白了吗?
      

  4.   

    jfzsl(剿匪总司令):
        常量的这些我知道,但是
        如果一个内存体比父类大的子类被切割成父类用,那会是什么结果?
        如果一个内存体比子类小的父类被扩充成子类用,那会是什么结果?
      

  5.   

    jfzsl(剿匪总司令):
    "long    a=(long)b; 有可能个a付一个错值(不一定等于b)!"----a的低位会等于b,高位会是0,这是编译器做的,你这句不对吧?
      

  6.   

    如果一个内存体比父类大的子类被切割成父类用,那会是什么结果?
    ->那会只有父类的成员!
    如果一个内存体比子类小的父类被扩充成子类用,那会是什么结果?
    ——>有可能程序出错!
    ----a的低位会等于b,高位会是0,这是编译器做的,你这句不对吧?
    ——>是的!我错了,把指针和数据类型搞混了!不好意思!呵呵!
      

  7.   

    jfzsl(剿匪总司令):
    如果一个内存体比父类大的子类被切割成父类用,那会是什么结果?
    ->那会只有父类的成员!
    如果一个内存体比子类小的父类被扩充成子类用,那会是什么结果?
    ——>有可能程序出错!
    这段
    void somefuc(CWND* pWnd){...}
    我们会常用CDialog/CView..的指针代入就是所谓的切割吧?为什么我们还能继续调用CDialg/CView的其他CWnd没有的成员函数?
    如果是提升,就是说把pWnd扩充成了子类指针,为什么不会出错.
    如果都不是提升或者扩充,编译器背后做了什么动作?
      

  8.   

    void somefuc(CWND* pWnd){...}
    我们会常用CDialog/CView..的指针代入>就是所谓的切割吧?为什么我们还能继续调用CDialg/CView的其他CWnd没有的成员函数?
       这不是切割,只是指针的强制类型转换,对保存有CDialog或者CView信息的内存体并没有改变。
    >如果是提升,就是说把pWnd扩充成了子类指针,为什么不会出错.
       这也不是提升,我们经常强制转换某个pWnd到pDialog或者pView,是因为这个pWnd指向的内存体本身其实是CDialog*或者CView*。如果都不是提升或者扩充,编译器背后做了什么动作?