c++ - Qt/GCC : Returning an object/nullptr from a function by value. 为什么这段代码可以编译?

标签 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;
    }
}

最佳答案

QByteArray之一 constructors takes a pointer ,所以正在为您 build 一个。据推测,如果您的 SomeClass 类型有一个带有指针 arg 的构造函数,它的行为会相同。

关于c++ - Qt/GCC : Returning an object/nullptr from a function by value. 为什么这段代码可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975125/

相关文章:

c++ - Qt 同时多次点击鼠标

c++ - 像素文本到 3d 网格转换库

C++ 读取内存地址/指针和偏移量

c++ - 在基类之间 move 语义

c++ - Qt QSpinbox 在设置范围后接受 '+' 符号

c++ - QTableView 如何设置特殊行的背景色?

c++ - macOS High Sierra 上的非默认编译器(GCC 或 Vanilla-Clang)链接问题

c - 为什么int类型在BSS段占8字节,在DATA段占4字节

c - 下划线作为 C 中的参数是什么意思?

c++ - 为什么在 C++ 中需要复制构造函数来声明和初始化对象?