Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. OF中关于tmp类型变量的运算和使用

OF中关于tmp类型变量的运算和使用

已定时 已固定 已锁定 已移动 OpenFOAM
4 帖子 3 发布者 5.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • A 离线
    A 离线
    Aeronastro
    写于 最后由 编辑
    #1

    我在OF源码中看到tmp类型的变量运算,比如tmp<volSymmTensorField> LL = (一个场), volSymmTensorField MM(......); 然后 LL && MM就可以计算。我之前看到到tmp,理解成一个指针,用于大数据量的场的赋值中,优化内存。但这样的话,LL&&MM我感觉不太理解了,一个指针和一个场怎么能运算呢?而且用tmp的话,要和new对应使用吧?

    如果定义返回值类型为tmp的函数,在函数体中就用到了new,这个我是理解的,难道定义一个tmp类型的变量就不用new了么?像tmp<volSymmTensorField> LL =(一个场)这样?

    谢谢各位的指教!

    W 1 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    写于 最后由 编辑
    #2

    如果简单的把tmp里面成为一个指针会很困难。tmp更像一个类的宏定义。如果将tmp看做一个类的话,各种问题迎刃而解。所有你可以L & M,也可以tmp<scalarField> S = class->S()。tmp的优点在于可以防止大量拷贝复制。然而代码非常底层。我更倾向优雅的使用它并忽略它的实现。

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 Aeronastro 最后由 编辑
    #3

    @Aeronastro

    1. 很多操作符都对 tmp<> 类型进行重载了,因此 tmp<> 类型的对象可以直接使用这些操作符进行相应的操作。

    2. tmp<> 类型封装的变量可以是用 new 申请的对象(存储堆内存上),也可以不是(存储在栈内存上):http://marinecfd.xyz/openfoam-tmp

    3. tmp<volSymmTensorField> LL = 调用的是拷贝构造函数,因此右边也应该是 tmp<volSymmTensorField>。

    A 1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 wwzhao 最后由 编辑
    #4

    @wwzhao 好贴:cheeky:

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]