关于C++中的数据类型问题

该主题包含 2 个回复,有 2 个参与人,并且由 Gavin 的头像 Gavin1 年, 5 月 前 最后一次更新。

正在查看 3 个帖子 - 1 至 3 (共计 3 条)
  • 作者
    帖子
  • #17909
    Gavin 的头像
    Gavin
    学员
    注册日期: 2015/04/15
    发帖数: 3
    回帖数: 4

    Hi,机器猫老师:

    关于C++中的数据类型我目前感觉非常困惑。
    在一般的教程中C++的类型最多也就是被 int char 之类,和python以及mel很近似。
    最多更细分一下,比如对整形或者负值,对bit数的要求。这个我可以理解。

    但是,当用到第三方库的时候,为什么会多出那么多第三方库的数据类型。
    比如maya的api 有MString zlib 有uLong Bytef
    在看mel加密教学的时候,这些数据一出现,我就变得糊涂了。

    不知道您有没有简单的说明方式,谢谢。

    #17988
    机器猫 的头像
    机器猫
    教师
    注册日期: 2014/06/20
    发帖数: 1
    回帖数: 15

    是的,每个第三方的库都有可能会有自己的类型,如果你自己写了个库,为了方便一些功能极有可能会自己设计一些数据结构(类型),如果有接收自定义类型的的函数暴露出来了,那为了填写这个函数的参数就需要用对应的类型,是很正常的。

    这个其实也分两大种,而你的举例恰好包含了这两种:
    一种是全新的数据结构,比如你说的MString,是Maya自己的一个字符串类的实现,如果你以后学其他的库,比如Houdini的HDK有对应的UT_String,Qt有QString,STL有std::string,其目标都是一个字符串类,但都是自己的实现,本质上是完全不同的类型。之所以要各自实现一边就是为了和自身的API结合的更紧密。
    另一种其实就是c中的typedef起的别名,比如uLong,Bytef,都属这种。这种本身没有创建新的类型,只不过给原有的类型起了个别名。比如有的平台中uLong就是unsigned int,这俩完全等价,而Bytef就是unsigned char。之所以专门起个别名,一方面是为了叫起来方便,看起来直观,另一方面是不同的平台中相同的类型有时size是不一样的(比如int有的平台32 bits有的64 bits),给不同平台的固定大小的类型起好别名可以让代码独立于平台,让你的代码在mac、linux、windows甚至移动平台都可以用。

    一般而言如果是某个库中的,则可以在其文档中找到对应的说明,比如MString可以在maya doc中找到,而uLong应该可以在zlib的代码注释或者文档中找到(如果找不到可能是命名太直接所以作者没有解释)。

    如果有其他不明白可以再问。

    #17993
    Gavin 的头像
    Gavin
    学员
    注册日期: 2015/04/15
    发帖数: 3
    回帖数: 4

    感谢您的回复,这部分我想我完全明白了。

    目前看来应该就剩下指针部分了,等我把视频全部看完再请教您

正在查看 3 个帖子 - 1 至 3 (共计 3 条)

抱歉,回复评论必需登录。