我有一个指向std::vector<char>
的引用,我想将其作为参数传递给一个接受std::vector<unsigned char>
的函数。 我能在不复制的情况下做到这一点吗?
我有以下函数并且它可以正常工作; 但是我不确定是否实际上发生了复制-有人可以帮助我理解吗? 是否可以使用std::move
避免复制,或者它已经没有被复制了?
static void showDataBlock(bool usefold, bool usecolor,
std::vector<char> &chunkdata)
{
char* buf = chunkdata.data();
unsigned char* membuf = reinterpret_cast<unsigned char*>(buf);
std::vector<unsigned char> vec(membuf, membuf + chunkdata.size());
showDataBlock(usefold, usecolor, vec);
}
我在考虑我可以写:
std::vector<unsigned char> vec(std::move(membuf),
std::move(membuf) + chunkdata.size());
这是否有些过度?实际会发生什么?
std::vector<unsigned char> vec(membuf, membuf + chunkdata.size());
makes a copy of the data inchunkdata
- M.MshowDataBlock
的名称,它可能需要重新设计为接受通用的迭代器对。 - M.Mstd::vector<unsigned char>
作为其第三个参数。不过我想知道为什么这个重载函数使用非 const 引用来接收它的第三个参数。如果另外一个重载函数也使用非 const 引用来接收它的参数,那么它可能会对参数进行修改,而所示代码无法将从vec
到chunkdata
的修改进行复制。 - MSalters