передача неконстантного объекта для входного параметра const?

В настоящее время я анализирую следующий фрагмент кода:

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> >& в качестве входного параметра, но при использовании других методов результат, который я получаю, является неконстантным параметром tmp<GeometricField<scalar, PatchField, GeoMesh> > tMag(см. третий кодексанипет). Следовательно, возможно ли передать неконстантный объект для констант
входной параметр или я что-то здесь неправильно понимаю?

Привет
Streight

0

Решение

Я не могу найти звонки surfaceSum (несколько typedefs будут значительно улучшить читабельность), но, да, вы можете передать неконстантный объект в качестве входного параметра const. const на входе только говорит «Я не буду изменять объект, который вы передаете».

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]