0

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

1 回答 1

1

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

Qt 还支持多种类型的迭代器,STL 风格、Java 风格和 boostforeach风格。我更喜欢这种foreach风格,它可以让我用最少的代码和最高的可读性。这似乎也是 Qt 倾向于喜欢的文档和示例。

在查看要使用的迭代器时,请务必阅读 mutable v immutable。

QList<QProcess *> listOfProcesses;

// ...

foreach(Process * p, listOfProcesses)
{
    p->start();
}

附带说明一下,我可能p会用.Ctrl+Shift+Rpprocess

希望有帮助。

于 2015-03-07T17:34:54.350 回答