C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了什么是c的默认分配操作行为?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
比如,它困惑了我:
struct A {
//  some fileds...
    char buf[SIZE];
};

A a;
a = a;

通过A的字段buf,看起来认的赋值操作可能会调用类似memcpy的东西来将对象X分配给Y,那么如果将对象分配给自身并且没有定义明确的赋值操作,如a = a;以上.@H_772_5@ @H_318_4@memcpy手册页:@H_772_5@

DESCRIPTION

The  memcpy() function copies n bytes from memory area src to memory area dest.  The memory areas must not overlap.  Use memmove(3) if the memory areas do overlap.

如果使用memcpy,可能会出现一些未定义的行为.@H_772_5@

那么,C对象中的认赋值操作行为是什么?@H_772_5@

解决方法

赋值运算符不是根据memcpy(第12.8 / 28节)定义的.

如您所见,每个char元素都将单独分配.这总是安全的.@H_772_5@

但是,在as-if规则下,编译器可以用memmove替换它,因为它对char数组具有相同的行为.它也可以用memcpy替换它,如果它可以保证memcpy会导致同样的行为,即使理论上这样的事情是未定义的.编译器可以依赖于理论上未定义的行为;存在未定义行为的原因之一是编译器可以将其定义为更适合其操作的​​任何内容.@H_772_5@

实际上,在这种情况下,编译器可以进一步采用as-if规则,并且根本不对数组执行任何操作,因为这也会导致相同的行为.@H_772_5@

大佬总结

以上是大佬教程为你收集整理的什么是c的默认分配操作行为?全部内容,希望文章能够帮你解决什么是c的默认分配操作行为?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。