目前我正在分析以下代码段:
fvc::surfaceSum(mag(phi))().internalField()
与
template<class Type>
tmp<GeometricField<Type, fvPatchField, volMesh> > surfaceSum
(
const tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >& tssf
)
{
tmp<GeometricField<Type, fvPatchField, volMesh> > tvf = surfaceSum(tssf());
tssf.clear(); //If object pointer points to valid object:delete object and
//set pointer to NULL
return tvf;
}
和
template<class Type, template<class> class PatchField, class GeoMesh>
tmp<GeometricField<scalar, PatchField, GeoMesh> > mag
(
const GeometricField<Type, PatchField, GeoMesh>& gf
)
{
tmp<GeometricField<scalar, PatchField, GeoMesh> > tMag
(
new GeometricField<scalar, PatchField, GeoMesh>
(
IOobject
(
"mag(" + gf.name() + ')',
gf.instance(),
gf.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
gf.mesh(),
gf.dimensions()
)
);
mag(tMag(), gf);
return tMag;
}
和
template<class T>
inline const T& Foam::tmp<T>::operator()() const
{
if (isTmp_) // bool isTmp_//Flag for whether object is a temporary or a constant object
{
if (!ptr_) //mutable T* ptr_; //- Pointer to temporary object
{
FatalErrorIn("const T& Foam::tmp<T>::operator()() const")
<< "temporary deallocated"
<< abort(FatalError);
}
return *ptr_;
}
else
{
return ref_; //const T& ref_ //- Const reference to constant object
}
}
和
template<class Type, template<class> class PatchField, class GeoMesh>
typename
Foam::GeometricField<Type, PatchField, GeoMesh>::InternalField
{
this->setUpToDate(); //Set up to date
storeOldTimes(); //Store the old-time fields.
return *this;
}
第二个代码片段中的方法surfaceSum(...)期望const tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >&
作为输入参数,但是当通过其他方法时,我得到的结果是非const参数tmp<GeometricField<scalar, PatchField, GeoMesh> > tMag
(参见第三个) codesnippet)。因此,是否可以为const传递非const对象
输入参数还是我在这里误解了什么?
问候 streight
答案 0 :(得分:2)
我找不到对surfaceSum
的任何调用(一些typedef 极大提高了可读性),但是,是的,您可以将非const对象作为const输入参数传递。输入中的const
仅显示“我不会修改您传递的对象”。