以下代码无法使用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;
}
}
答案 0 :(得分:4)
QByteArray
个constructors takes a pointer中的一个,因此正在构建一个。假设你的SomeClass
类型有一个带指针arg的构造函数,它的行为会相同。