如果代码更改为 std::move(vector) 将在此函数中保存复制操作

If code changed to std::move(vector) will that save a copy operation in this function

函数是将文件内容提取到一个向量中,如下所示:

std::vector<uint8_t> GetFileContents(const std::string& filename)
{
    std::ifstream file(filename, std::ios::binary);
    if (!file.good())
    {
        return {};
    }
    file.seekg(0, std::ios::end);
    std::streampos fileSize = file.tellg();
    file.seekg(0, std::ios::beg);

    std::vector<uint8_t> fileData(fileSize);
    file.read((char*) &fileData[0], fileSize);
    return fileData;
}

线上:

std::vector<uint8_t> fileData(fileSize);
file.read((char*) &fileData[0], fileSize);
return fileData;

fileData 向量被复制到一个临时向量中以在此处返回?

我需要更改为:

std::vector<uint8_t> fileData(fileSize);
file.read((char*) &fileData[0], fileSize);
return std::move(fileData);

要进行移动并保存矢量复制操作?

功能中是否需要任何其他更改以支持移动?

空 case std::move({}) 中有任何值吗?

不,你不应该在那里使用 std::move

这避免了可能的NRVO,而且无论如何都有一个隐含的举动。

有关详细信息,请参阅 Automatic_move_from_local_variables_and_parameters