草庐IT

C++ memcpy 返回值

根据http://en.cppreference.com/w/cpp/string/byte/memcpyC++的memcpy采用三个参数:目标、源和大小/字节。它还返回一个指针。void*memcpy(void*dest,constvoid*src,std::size_tcount);为什么会这样?参数还不够输入和复制数据吗?我是不是误会了什么?示例不使用返回值。 最佳答案 如果一个函数没有特定的返回值,通常习惯上返回一个输入参数(被视为主要参数的那个)。这样做允许您在表达式中使用“链式”函数调用。例如,你可以这样做charbuf

c++ - 我应该为 memcpy 和 realloc 包含什么标题?

我正在将一个项目移植到iPhone,它使用了未找到的realloc和memcpy。要包含的标题是什么?这是一个混合了ObjectiveC和C++的项目,我开始迷路了。提前感谢您的帮助! 最佳答案 在C中:#include//memcpy#include//realloc在C++中,删除.h和前缀为c。在C++中,它们将被放置在std命名空间中,但也是全局的。 关于c++-我应该为memcpy和realloc包含什么标题?,我们在StackOverflow上找到一个类似的问题:

c++ - 我应该为 memcpy 和 realloc 包含什么标题?

我正在将一个项目移植到iPhone,它使用了未找到的realloc和memcpy。要包含的标题是什么?这是一个混合了ObjectiveC和C++的项目,我开始迷路了。提前感谢您的帮助! 最佳答案 在C中:#include//memcpy#include//realloc在C++中,删除.h和前缀为c。在C++中,它们将被放置在std命名空间中,但也是全局的。 关于c++-我应该为memcpy和realloc包含什么标题?,我们在StackOverflow上找到一个类似的问题:

c++ - std::array 位是否与旧的 C 数组兼容?

是std::arrayv的底层位表示和Tu[N]一样吗?换句话说,复制N*sizeof(T)是否安全?字节从一个到另一个?(通过reinterpret_cast或memcpy。)编辑:为了澄清,重点是相同的位表示和reinterpret_cast.例如,假设我有这两个类在一些简单的可复制类型T,对于某些N:structVecNew{std::arrayv;};structVecOld{Tv[N];};还有遗留功能Tfoo(constVecOld&x);如果表示相同,那么这个调用是安全的并且避免了复制:VecNewx;foo(reinterpret_cast(x));

c++ - std::array 位是否与旧的 C 数组兼容?

是std::arrayv的底层位表示和Tu[N]一样吗?换句话说,复制N*sizeof(T)是否安全?字节从一个到另一个?(通过reinterpret_cast或memcpy。)编辑:为了澄清,重点是相同的位表示和reinterpret_cast.例如,假设我有这两个类在一些简单的可复制类型T,对于某些N:structVecNew{std::arrayv;};structVecOld{Tv[N];};还有遗留功能Tfoo(constVecOld&x);如果表示相同,那么这个调用是安全的并且避免了复制:VecNewx;foo(reinterpret_cast(x));

c++ - "&s[0]"是否指向 std::string 中的连续字符?

我正在做一些维护工作,遇到了类似以下情况:std::strings;s.resize(strLength);//strLengthisasize_twiththelengthofaCstringinit.memcpy(&s[0],str,strLength);我知道使用&s[0]如果它是std::vector是安全的,但这是对std::string的安全使用吗? 最佳答案 在C++98/03标准下,不保证std::string的分配是连续的,但C++11强制它是连续的。在实践中,无论是我还是HerbSutter知道不使用连续存储的实

c++ - "&s[0]"是否指向 std::string 中的连续字符?

我正在做一些维护工作,遇到了类似以下情况:std::strings;s.resize(strLength);//strLengthisasize_twiththelengthofaCstringinit.memcpy(&s[0],str,strLength);我知道使用&s[0]如果它是std::vector是安全的,但这是对std::string的安全使用吗? 最佳答案 在C++98/03标准下,不保证std::string的分配是连续的,但C++11强制它是连续的。在实践中,无论是我还是HerbSutter知道不使用连续存储的实

c++ - 不同的普通可复制类型之间的 std::memcpy 是未定义的行为吗?

长期以来,我一直在使用std::memcpy来规避严格别名。例如,检查float,如this:floatf=...;uint32_ti;static_assert(sizeof(f)==sizeof(i));std::memcpy(&i,&f,sizeof(i));//useitoextractf'ssign,exponent&significand但是,这一次,我检查了标准,我没有找到任何可以验证这一点的东西。我发现的只有this:Foranyobject(otherthanapotentially-overlappingsubobject)oftriviallycopyablety

c++ - 不同的普通可复制类型之间的 std::memcpy 是未定义的行为吗?

长期以来,我一直在使用std::memcpy来规避严格别名。例如,检查float,如this:floatf=...;uint32_ti;static_assert(sizeof(f)==sizeof(i));std::memcpy(&i,&f,sizeof(i));//useitoextractf'ssign,exponent&significand但是,这一次,我检查了标准,我没有找到任何可以验证这一点的东西。我发现的只有this:Foranyobject(otherthanapotentially-overlappingsubobject)oftriviallycopyablety

c - bzero() & bcopy() 与 memset() & memcpy()

有什么理由使用非标准的bzero()和bcopy()而不是memset()和在Linux环境中使用memcpy()?我听到很多人说它们更适合Linux编译器,但没有看到比标准函数有任何优势。它们是否比标准的更优化,或者它们是否有任何行为的特殊性,它们是首选的? 最佳答案 虽然bzero和bcopy函数不是ISOC(我假设您在将它们称为非标准时所说的实际标准),但它们是一个POSIX标准的东西,尽管它们早于ISO和POSIX。并注意使用"is"这个词-这些函数在POSIX.1-2001中已弃用,并在POSIX.1-2008中最终删除,