C++编程基础之赋值操作符

C++编程基础之赋值操作符,第1张

C++编程基础之赋值操作符,第2张

关于变量最关键的,由于篇幅限制没有解释。下面是访问内存的方法。

赋值语句

前面解释过,要访问内存,需要对应的地址来表示要访问哪个内存,变量是一个映射,所以变量名相当于一个地址。对于内存的操作,一般情况下只读取内存中的值,将值写入内存(不考虑内存的分配和释放)。在C++中,为了向变量对应的地址所标识的内存中写入一个值(为简单起见,后面将变量A对应的地址称为变量A的地址,变量A的地址所标识的内存直接称为变量A),只需先写入变量名,再加上“=”,然后是desire即可。如下所示:

a = 10.0fb = 34

因为数字是连接的,所以可以连接表达式,编译器可以生成计算相应表达式所需的代码,如下所示:

c = a/b * 120.4 f;

上一句的编译器会生成除法和乘法的CPU指令。计算完成后(即得到表达式a/b * 120.4f的值后),还会生成将计算结果放入变量C的CPU指令,这是语句的基本功能(对于语句,将在C++中从零(6)开始详细讲解)。

在编写上面的赋值语句时,要确保使用的变量在这个语句之前已经定义好了,这样编译器在生成CPU指令进行赋值时就可以找到对应变量的地址,然后完成CPU指令的生成。比如上面的A和B,在写上面的语句之前,需要写一个类似下面的变量定义:

浮动a;龙b;

直接写变量名也是一个语句,导致编译器生成一个读取对应变量内容的语句。也就是说,它可以写成如下形式:

a;

上面会生成一个读取内存的语句,即使从内存中读取的数没有应用(当然如果编译器有优化选项,上面的语句也不会生成任何代码)。从这一点和上面的c = a/b * 120.4 f;语句,可以看到变量可以返回数字,变量返回的数字是根据变量的类型解释变量对应的内存中的内容得到的数字。这句话可能没那么好理解。看完下面关于类型转换的部分应该就能理解了。

因此,为了将数据写入内存块,使用了赋值语句(等号);要读取内存块,请写入标识内存的变量名。所以可以这样写:a = a+3;

假设A的原值是1,上面的赋值语句把A的值拿出来,加上3得到结果4,然后把4写入A,由于C++用“=”来表示赋值语句,很容易把人和数学中的等号混淆,这一点要注意。

并如上浮动a;语句,当变量还没有赋值时,a的值是多少?天知道。A当时的内容是什么(对于VC编译器,打开调试选项时,这些未初始化的内存会被0xcccccc填满),用IEEE real*4格式解释一下就可以得到一个对应的数,也就是A的值,所以变量在定义的时候就要赋值(不过会有性能影响,但很小)为了初始化变量,防止出现莫名其妙的值,比如:float a = 0.0f。

赋值运算符

上面的a = a+3;将a的值增加3。在C++中,针对这种情况给出了一个速记方案,即前面的语句可以写成:a+= 3;。需要注意的是,这两个语句在逻辑上是将变量A的值增加3,但实际上是不同的。后者可以编译成优化的代码,因为它意味着将某块内存的值增加一定的量,而前者意味着将一个数写入某块内存。所以如果可能的话,尽量用后者,也就是a+= 3;。这种语句允许编译器做一些优化(但是因为现在的编译器都很智能,可以发现a = a+3;是一块内存的增值操作而不是一块内存的赋值操作,所以上面两种说法其实可以认为是完全一样的,只是具有速记的功能)。

对于上述情况,也可应用于减法、乘法等二元非逻辑运算符(非逻辑值运算符,即不是a & & = 3;),如:a * = 3;a-= 4;a = 34a > > = 3;等等。

除了上面的简写,C++还提供了一个简写,即a++;,逻辑上相当于a+= 1;。同上,在计算机编程中,经常用到加一和减一,所以CPU专门提供了加一和减一两个指令(换算成汇编语言,Inc和Dec),但速度比直接用加减指令执行要快得多。因此,在Inc++中提供了“++”和“-”运算符,以对应Inc和dec . So a++;虽然逻辑上总和a = a+1;相当于。实际上是由于编译器可能做出的优化处理而不同,但如上所述,由于编译器的智能,有可能看到a = a+1;可以编译成Inc指令,即使不使用a++;但是你还是可以得到优化的代码,这样a++;只会有缩写的意思。

需要注意的是,a = 3;此语句还将返回一个数字,即在被赋值后的值。因为可以返回数字,根据C++从零(II)开始,“=”属于运算符,可以写成:

c = 4+(a = 3);

括号的原因是“=”的优先级低于“+”,比较常见和正常的应用是:c = a = 3;

需要注意的是,C和A并没有赋给3,而是在A赋给3之后A才赋给C。虽然最后的结果是一样的,C和A都赋给了3,但不应该这样理解。因为有a++;表示是a+= 1;是a = a+1;,所以a++;也会返回一个数字。为此,C++提供了另一个缩写,++ a;。

假设A是1,那么a++;会先返回a的值,1,然后在a的值上加1;和++ a;先给a的值加1,然后返回a的值,2。A-和-A也是一样,只是减一。

上面的变量A根据最顶层变量的定义是一个float类型的变量,使用++运算符并不能达到预期的优化效果,因为float类型是浮点类型,使用IEEE real*4格式表示数字,而不是二进制源代码或补码。前面提到的Inc和Dec指令都是为了二进制表示的优点而用来快速加1和减1的。因此,如果将“++”运算符应用于浮点变量,将完全缩写,不会产生优化效果(当然,如果CPU提供新的指令集,比如MMX,快速递增和递减real*4格式,并且编译器支持相应的指令集,仍然可以产生优化效果)。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++编程基础之赋值操作符

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情