Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::memmove在同一个对象之间总是安全的吗_C++_Language Lawyer_Memmove - Fatal编程技术网

C++ std::memmove在同一个对象之间总是安全的吗

C++ std::memmove在同一个对象之间总是安全的吗,c++,language-lawyer,memmove,C++,Language Lawyer,Memmove,在相同的对象实例(包括子对象)之间移动std::memmove是否总是安全的 也就是说,对于任何T和任何T而言,以下各项是否安全,并且是否保持T不变: 模板 无效副本(T&T){ 标准:memmove(&t,&t,sizeof(t)); } 作为一个必然的问题,以下情况是否总是安全的: 模板 无效冗余副本(T&s、const T&d){ 如果(std::addressof(s)=std::addressof(d)){ 标准:memmove(&d,&s,sizeof(T)); } } 不,它并不

在相同的对象实例(包括子对象)之间移动
std::memmove
是否总是安全的

也就是说,对于任何
T
和任何
T
而言,以下各项是否安全,并且是否保持
T
不变:

模板
无效副本(T&T){
标准:memmove(&t,&t,sizeof(t));
}
作为一个必然的问题,以下情况是否总是安全的:

模板
无效冗余副本(T&s、const T&d){
如果(std::addressof(s)=std::addressof(d)){
标准:memmove(&d,&s,sizeof(T));
}
}

不,它并不总是安全的

如果对象是或不是,则不会指定
memmove
的行为

什么是潜在重叠?

如果子对象是

。基类子对象,或
. 使用[[]]属性声明的非静态数据成员


我假设我不需要在这个答案中给出的定义。

不,它并不总是安全的

如果对象是或不是,则不会指定
memmove
的行为

什么是潜在重叠?

如果子对象是

。基类子对象,或
. 使用[[]]属性声明的非静态数据成员


我假设我不需要在这个答案中给出的定义。

提到函数可能导致未定义行为的情况。这不能回答你的问题吗?@RSahu-不,不能回答,因为它适用于任意复制操作,而不适用于对象是同一对象的非常有限的情况。特别是,标准中有各种各样的例子,当字节从对象复制到char缓冲区,然后再复制回来时,会应用一些特殊条件,因此这种情况通常是不同的。提到函数可能导致未定义行为的情况。这不能回答你的问题吗?@RSahu-不,不能回答,因为它适用于任意复制操作,而不适用于对象是同一对象的非常有限的情况。特别是,标准中有各种各样的例子,当字节从对象复制到char缓冲区,然后再复制回来时,会应用一些特殊条件,因此这种情况通常是不同的。