none
教科書裡關於裝箱的解釋, 對嗎, 高手請進~ RRS feed

  • 问题

  • 對角線那一句 "装箱是   基本数据类型到值类型    或 其他引用对象的隐式转换" , 對嗎?

    書名是 visual c++ .net (2008)典型案例, 這一章是講C++/CLI

    2012年5月16日 0:39

答案

  • 这里有点问题,基本数据类型是值类型,无需转换。而且到值类型的转换不是装箱。

    装箱是指将值类型转换为引用类型,比如

    ValueTypeBar foo;

    String ^ str=foo->ToString().

    如果ValueTypeBar没有重载ToString调用,而是直接调用Object::ToString这个虚函数的话,这会导致foo的内容被从栈复制到托管堆上的一个基于Object类的对象的数据区(因为解析ToString调用需要虚函数表)。这个过程被称为装箱。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP


    2012年5月16日 22:31
    版主
  • 由于C++.net对象都是由CObject派生的。所谓装箱就是将任意的.net对象向上转型成CObject。便于传递


    麻烦把正确答案设为解答。

    • 已标记为答案 Helen Zhao 2012年5月23日 2:54
    2012年5月16日 6:24
    版主

全部回复

  • 由于C++.net对象都是由CObject派生的。所谓装箱就是将任意的.net对象向上转型成CObject。便于传递


    麻烦把正确答案设为解答。

    • 已标记为答案 Helen Zhao 2012年5月23日 2:54
    2012年5月16日 6:24
    版主
  • 这里有点问题,基本数据类型是值类型,无需转换。而且到值类型的转换不是装箱。

    装箱是指将值类型转换为引用类型,比如

    ValueTypeBar foo;

    String ^ str=foo->ToString().

    如果ValueTypeBar没有重载ToString调用,而是直接调用Object::ToString这个虚函数的话,这会导致foo的内容被从栈复制到托管堆上的一个基于Object类的对象的数据区(因为解析ToString调用需要虚函数表)。这个过程被称为装箱。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP


    2012年5月16日 22:31
    版主