小编emk*_*y08的帖子

Qt - QList const正确性

A QList<T *>不容易纠正.考虑这个功能

void f(QList<T *> list)
{
    list[0]->constFunction();
}
Run Code Online (Sandbox Code Playgroud)

我可以改变f到

void f(QList<const T *> list)
Run Code Online (Sandbox Code Playgroud)

但后来我不能这样做

f(QList<T *>());    //Compile error
Run Code Online (Sandbox Code Playgroud)

再也没有了,因为编译器不能隐含地强制转换QList<T *>QList<const T *>.但是,我可以明确地重新解释QList,如下所示:

template <typename T> inline QList<const T *> &constList(const QList<T *> &list)
{
    return (QList<const T *> &)list;
}
Run Code Online (Sandbox Code Playgroud)

这使我能够使用constList模板函数将任何内容QList<T *>转换为a QList<const T *>,如

f(constList(QList<T *>()));
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但实际上这样做是否安全?

c++ qt const-correctness qlist

6
推荐指数
1
解决办法
3880
查看次数

标签 统计

c++ ×1

const-correctness ×1

qlist ×1

qt ×1