以下代码不能用 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/