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({}) 有任何价值吗?
不,你不应该std::move在那里使用。
这避免了可能的NRVO,而且无论如何都有一个隐式的移动。
有关更多详细信息,请参阅Automatic_move_from_local_variables_and_parameters。