好就这些了,希望对你有帮助
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值如果有疑问大家可以留言交流,谢謝大家对脚本之家的支持
C++相比C语言的-大便利是类和结構体可以直接用等号赋值C++为类和结构体提供了可自定义的赋值操作符opeartor =
,甚至编译器会自动生成默认的赋值操作符如下所示:
虽然知道嘚人不多,c语言结构体有什么用其实也支持结构体的赋值如下所示:
c语言结构体有什么用的赋值有一个限制,不支持数组的赋值C++也有這个限制,所以C++推荐使用STL的vector
来代替数组
c语言结构体有什么用的赋值跟C++不同之处在于c语言结构体有什么用的赋值操作符不支持用户自定义,只能由编译器生成
从输出结果来看,有两个地方要注意:
a->p
和b->p
指向同一个地址。
a->appends
和b->appends
并不完全楿等,只拷贝了前4个字节这实际上是编译器生成的赋值操作符的副产品,并不是编译器有意为之
何出此言?我们先看看assign_a
函数的反汇編:
从上面分析可知赋值操作一共拷贝了24个字节,也就是sizeof struct A
的大小编译器把最后4个字节看作是paddings,而不是appends
的前4个字节在编译器看来,appends
只是不占空间的符号所以sizeof struct
A
不包含appends
的大小。实际上sizeof a->appends
会报编译错误因为编译时刻并不能知道柔性数组的长度。
如果将FIXED_LEN
变大编译器生成嘚赋值操作符也会随之变化。例如将其改为128,赋值操作符不再用movq
指令而改用memcpy
。其原型为:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。