QProcess *p 行不是多余的吗?

Isn't the line QProcess *p redundant?

本文关键字:多余 QProcess      更新时间:2023-10-16

我偶然发现了这个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
     }

它对于代码可移植性或匹配示例时很有用。 假设您找到一个使用 100 行QProcess * p的示例,然后将其应用于流程向量,当您在每个位置将p换成(*iter)时,可读性会受到影响......但是,如果在局部范围的顶部分配具有相同名称的变量,则可以获得可读性/可维护性。

此外,Qt支持多种类型的迭代器,STL风格,Java风格和boost foreach风格。 我更喜欢foreach风格,它本身就是最少的代码和最高的可读性。 这似乎也是Qt的文档和示例所偏爱的。

当您查看要使用的迭代器时,请务必阅读有关可变与不可变的信息。

QList<QProcess *> listOfProcesses;
// ...
foreach(Process * p, listOfProcesses)
{
    p->start();
}
附带

说明一下,我可能会用p写一次,但在我提交或离开代码之前,我会在Qt Creator中Ctrl+Shift+R并将p重命名为process

希望有帮助。