关于tmp<volScalarField>&用法的疑问
-
在编写涉及到muEff的后处理函数时发现,使用下面方法得到muEff时,可以编译,但是计算结果是错的,或者浮点数溢出
const volScalarField& muEff = turbModel.muEff();
而改成以下形式时,计算结果是正确的
const tmp<volScalarField>& tmuEff = turbModel.muEff(); const volScalarField& muEff = tmuEff();
而对于其他变量,如T,U等,两种形式的写法没发现对计算结果有影响,请问tmp<volScalarField>&有什么意义吗?为什么有的变量要用这种写法?谢谢!
-
@wwzhao 在 关于tmp<volScalarField>&用法的疑问 中说:
tmp是智能指针,不应该用引用的方式返回。
请问是指这句
const tmp<volScalarField>& tmuEff = turbModel.muEff();
还是指这句
const volScalarField& muEff = tmuEff();
我是照着下面写的,把三句并成了两句
const volVectorField& U = lookupObject<volVectorField>(fieldName_); const tmp<volTensorField> tgradU(fvc::grad(U)); const volTensorField& gradU = tgradU();
-
//const tmp<volScalarField> tmuEff = turbModel.muEff(); // 错误,智能指针不能以引用方式返回 const tmp<volScalarField> tmuEff = turbModel.muEff(); // 正确 // 获得被封装对象的引用 const volScalarField& muEff = tmuEff(); // OpenFOAM 4 以前的用法 //const volScalarField& muEff = tmuEff.ref(); // OpenFOAM 4 以后的用法