QList<T *>
不容易实现const-correct。考虑下面这个函数:
void f(QList<T *> list)
{
list[0]->constFunction();
}
我可以将 f 改为
void f(QList<const T *> list)
但是我就做不了了。
f(QList<T *>()); //Compile error
现在不再可以隐式地将QList<T *>
转换为QList<const T *>
,因为编译器无法进行转换。但是,可以使用显式的reinterpret-cast将QList转换为如下形式:
template <typename T> inline QList<const T *> &constList(const QList<T *> &list)
{
return (QList<const T *> &)list;
}
这使我能够使用
constList
模板函数将任何QList<T *>
转换为QList<const T *>
,例如:f(constList(QList<T *>()));
看起来这样做没问题,但实际上这样做是否安全呢?
constList
函数的list
参数的const
并将f更改为void f(const QList<const T *> &list)
时,这样做是否安全? - emkey08