假设我有以下代码(C ++ / Qt):
QHash<QString, AppInfo*> links;
QList<AppInfo> apps = m_apps.values();
for (const AppInfo &app : apps) {
// Doing something with #app variable...
links.insert(app.other._appFile, &app);
}
m_apps
为QHash<QString, AppInfo>
,app.other._appFile
是文件的完整路径。
这就是问题:倒数第二行中的构造&app
是否正确?我需要有一个非常量的指向AppInfo对象的指针,以便稍后修改它。 &app
会直接链接到const AppInfo&
或AppInfo
对象吗?如果我试图修改获得的AppInfo*
对象,那么app会不会崩溃?谢谢。
抱歉,英语不是我的母语,我无法完美地提出问题标题。请做而不是我。
答案 0 :(得分:2)
links
为QHash<QString, AppInfo*>
,而非QHash<QString, const AppInfo*>
,因此为
links.insert(app.other._appFile, &app);
您正在启动从const AppInfo*
到AppInfo*
的隐式转换,这将导致编译器错误,而不是运行时错误(崩溃)。一个显而易见的解决方案是遍历地图而不使用const
for (AppInfo &app : apps)
{
}