让我们看一下上述方法的代码:
bool QDir::mkdir(const QString &dirName) const
{
const QDirPrivate* d = d_ptr.constData();
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
QString fn = filePath(dirName);
if (d->fileEngine.isNull())
return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
return d->fileEngine->mkdir(fn, false);
}
来源:http ://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n1381
正如我们所见,静态版本很容易实现:
bool QDir::mkdir(const QString &dirName) const
{
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
return QFileSystemEngine::createDirectory(QFileSystemEntry(dirName), false);
}
(另见http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n681)
首先,非静态方法有几个优点。显然,使用对象的现有文件引擎是有好处的。而且,我会想象在特定目录下创建多个目录的用例(QDir
已经指向)。
那么为什么不两者都提供呢?
判决(tl/dr):我认为原因是简单的代码卫生。QDir::makepath(path);
当您使用 API 时,和之间的区别QDir().makepath(path);
很小。创建对象的性能影响也可以忽略不计,因为如果您碰巧更频繁地执行操作,您将重用同一个对象。但是在代码维护者方面,可以说不维护同一方法的两个版本要方便得多(工作量更少且不易出错) 。