首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

赋值以后会发生什么事,该如何处理

2012-05-29 
赋值以后会发生什么事比如a b,我们暂且不去管a、b是什么类型,我们就想象成任意类型,在赋值之后,会发生什

赋值以后会发生什么事
比如a = b,我们暂且不去管a、b是什么类型,我们就想象成任意类型,在赋值之后,会发生什么事呢?
a现在可以正常用,里面能拿到b的值,但是对b来说,有没有什么影响?赋值在内存中实际上是怎么操作的?只是指针的移位吗?

请大家指教一下,谢谢。

[解决办法]
这个问题比较,首先得分两种情况,一种是a,b类型相同,另一种是a,b类型不相同。
如果两者类型相同,声明后编译器会在进程的栈中分配两块内存(如果此处不懂,可以参考内存分配的知识),执行a=b时实际上是将b内存中的值传给了a内存,对于b没有任何影响;
如果两者类型不相同,那么就不是直接赋值了,需要先发生类型转换,再赋值(关于类型转换可以参考我的博客http://www.cnblogs.com/jpcflyer/archive/2012/02/16/2353447.html )
[解决办法]
额??怎么搞出指针来了??赋值可以理解为内存的复制,但是不同类型之间的赋值,可能需要根据类型来重新排列下内存。a=b;只影响a,不影响b
[解决办法]
一言难尽,看看effectivec++吧。

[解决办法]
对于指针a与指针b
a=b,是将a同时指向b指向的内存块(即将b指向的内存块,同时也让a指向)……
*a=*b,就简单了,只是将b指向内存块中的值赋值给a指向内存块中的值……
不过这些都好基础啊……
[解决办法]

探讨

引用:

额??怎么搞出指针来了??赋值可以理解为内存的复制,但是不同类型之间的赋值,可能需要根据类型来重新排列下内存。a=b;只影响a,不影响b

我的意思是说,指针也会有赋值的时候啊,如果是指针进行赋值,也是只影响a不影响b吗?那就是说赋值之后,a和b就一直指向相同的地方?(不考虑这两个指针的生命周期的问题)

[解决办法]
探讨

引用:

额??怎么搞出指针来了??赋值可以理解为内存的复制,但是不同类型之间的赋值,可能需要根据类型来重新排列下内存。a=b;只影响a,不影响b

我的意思是说,指针也会有赋值的时候啊,如果是指针进行赋值,也是只影响a不影响b吗?那就是说赋值之后,a和b就一直指向相同的地方?(不考虑这两个指针的生命周期的问题)

[解决办法]
对于不同的数据类型,a = b;这样的操作所发生的事情有很大的不同,比如基本数据类型int和你自己定义的一个类(且这个类中有指针类型的成员变量),后面的情况,如果该类没有提供拷贝赋值操作符重载,那么十有八九会有你意想不到的后果。如果你曾经实现过拷贝赋值操作符重载的话,那么楼主这个问题也就不再是问题了。

个人认为,讨论这个问题应该要分具体的数据类型来说比较好。

热点排行