我偶然发现了this GitHub项目。
虽然我一般不同意这些代码,但我无法理解这条线:
QProcess *p;
和p=*it;
当我想创建一个新的指针时,我是错的完全是多余的,还是有一些目的,例如性能明显缺失?
#define VM_COUNT 202
cout << "Creating process objects" << endl;
for(int i=0;i<VM_COUNT; i++)
vms.push_back(new QProcess(parent));
cout << "Processes created. Type 'asdf' or someting to start them...";
string s;
cin >> s;
cout << "Starting processes" << endl;
QProcess* p; // this <------
QVector<QProcess*>::Iterator it;
for(it=vms.begin(); it!=vms.end(); ++it){
p=*it; // this <------
p->start(command,args); // this <------
}
我会简单地选择:
for(it=vms.begin(); it!=vms.end(); ++it)
{
(*it)->start(command,args); // ty Mike
}
答案 0 :(得分:1)
它对于代码可移植性或匹配示例很有用。假设您找到一个使用QProcess * p
100行的示例,然后将其应用于流程向量,当您在每个位置换出p
(*iter)
时,可读性会受到影响...但是如果在本地范围的顶部分配一个具有相同名称的变量,则可以获得可读性/可维护性。
此外,Qt支持多种类型的迭代器,STL样式,Java样式和boost foreach
样式。我更喜欢foreach
样式,它使自己适用于最少的代码和最高的可读性。而且它似乎也是Qt倾向于偏爱的文档和示例。
在查看要使用的迭代器时,请务必阅读mutable v immutable。
QList<QProcess *> listOfProcesses;
// ...
foreach(Process * p, listOfProcesses)
{
p->start();
}
在旁注中,我可能会使用p
编写一次,但在我提交或保留代码之前,我会在Qt Creator中执行Ctrl+Shift+R
并将p
重命名为process
。
希望有所帮助。