Qt / GCC:按值从函数返回object / nullptr。为什么这段代码会编译?

时间:2014-09-22 13:17:12

标签: c++ qt gcc

以下代码无法使用GCC 4.8进行编译:

SomeClass makeObject(bool returnsNullptr)
{
    if (!returnsNullptr)
    {
        return SomeClass();
    }
    else
    {
        return nullptr;
    }
}

以下是错误消息:

C:\Users\HGH\Documents\GitHub\PureCpp\ReturnValueOptimization\src\main.cpp:64: error: could not convert 'nullptr' from 'std::nullptr_t' to 'SomeClass'
         return nullptr;
                ^

当我按值返回一个对象时,这是预期的。但是下面的Qt代码编译并且似乎运行得很好。为什么会这样?

QByteArray ResourceFileManager::loadFromFolder(const QString& folderPath, const QString& fileName)
{
    QString fullFilePath = folderPath + "/" + fileName;
    QFile file(fullFilePath);
    qDebug() << "Loading resource: " + file.fileName();

    if (file.open(QIODevice::ReadOnly)) {

        QByteArray buffer = file.readAll();
        file.close();

        return buffer;
    }
    else {
        return nullptr;
    }
}

1 个答案:

答案 0 :(得分:4)

QByteArrayconstructors takes a pointer中的一个,因此正在构建一个。假设你的SomeClass类型有一个带指针arg的构造函数,它的行为会相同。