Qt/GCC:按值从函数返回对象/nullptr.为什么要编译此代码
Qt/GCC: Returning an object/nullptr from a function by value. Why does this code compile?
以下代码不使用GCC 4.8编译:
SomeClass makeObject(bool returnsNullptr)
{
if (!returnsNullptr)
{
return SomeClass();
}
else
{
return nullptr;
}
}
这是错误消息:
C:UsersHGHDocumentsGitHubPureCppReturnValueOptimizationsrcmain.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
的一个构造函数使用指针,因此正在为您构建一个指针。假设您的SomeClass
类型有一个带有指针arg的构造函数,它的行为也会相同。
相关文章:
- 为什么我的节点在我设置后被设置为 nullptr = 新节点?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 为什么 char 可以在 std::array 中初始化为 nullptr,而不是单独初始化?
- 为什么 const auto &p{nullptr} 在 C++17 中不起作用,而 auto *p{nullptr} 不起作用?
- 为什么 lambda nullptr 取消引用在这种情况下有效?
- 为什么在类型转换的 nullptr 上不发生隐式转换
- 为什么分配了 nullptr 的指针可以调用成员函数?
- 为什么nullptr是核心语言的一部分,而nullptr_t是STL的一部分?
- 为什么使用自定义删除器unique_ptr不适用于 nullptr,而shared_ptr则适用于 nullptr?
- 为什么使用 nullPtr 调用函数不会使我的应用程序崩溃
- 如果我将 p!=nullptr 更改为 *p!='\0',那么它可以工作,但为什么呢?
- C++:为什么'this'不能成为 nullptr?
- 为什么我不能使用 nullptr 初始化自动推导的指针?
- 为什么"bool c = nullptr ;"编译 (C++11)?
- 为什么可以将NULLPTR分配给STD :: String
- 为什么 nullptr 不能转换为 int?
- 为什么 empty() std::basic_string c_str() 不是 nullptr?
- 为什么函数模板不理解 NULL,但适用于 nullptr
- Qt/GCC:按值从函数返回对象/nullptr.为什么要编译此代码