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

Ang*_*ber 0 c++ move-semantics

该功能是将文件内容提取到向量中,如下所示:

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;
}
Run Code Online (Sandbox Code Playgroud)

就行:

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

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

我需要更改为:

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

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

支持移动的功能还需要进行其他更改吗?

对于空的情况, std::move({}) 有任何价值吗?

Jar*_*d42 7

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

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

有关更多详细信息,请参阅Automatic_move_from_local_variables_and_parameters