为const输入参数传递非常量对象
passing non-const object for const input parameter?
目前我正在分析以下代码片段:
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
我找不到任何对surfaceSum
的调用(一些typedef会大大提高可读性),但是,是的,您可以将一个非常常量对象作为常量输入参数传递。输入上的const
只表示"我不会修改您传递的对象"。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- C++,如何使用常量对象和非常量对象进行比较?
- 通过从构造函数中的'this'复制的指针改变常量对象
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- C++ 对非常量对象的常量引用和对非常量对象的非常量引用之间的区别
- 算法不适用于非常量对象的const_iterator
- 为什么MSVC14允许声明指向动态未初始化常量对象的指针
- C++中的常量对象或私有/常量数据成员(变量)?
- 将值从指针复制到常量对象参数
- 指向静态常量对象的共享指针?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 将unique_ptr作为<Object>unique_ptr<常量对象返回>
- 对非常量对象的常量引用
- 为什么 std::move 适用于常量对象
- 如何最好地初始化和存储常量对象
- 构造常量对象与引用常量对象
- 指向从未变为常量的常量对象的C++指针
- 具有常量对象的代码大小
- 如何使构造函数接受一个非常量对象
- 我真的需要为常量对象实现用户提供的构造函数吗?