C++为什么不叫++C

来源:互联网 发布:hp打印机端口号 编辑:程序博客网 时间:2024/04/30 17:12
 《C++ Primer》确实给我带来了很多惊喜。

作为一本专业的具有较高门槛的"入门书",它有很多地方实在是国内的书不可及的,这不仅在于内容上的严谨,更表现在优秀的习题所带给学习者的启迪。

 习题5.16

你认为为什么C++不叫做++C?

看到这个习题,顿感眼前一亮(不禁想起某些国内书籍的题目,真是平淡如水),这对于理解前自增操作与后自增操作而言着实是个好的题目。

想弄明白这个问题,就需要先理解一些基础的概念。什么是自增操作呢?

 

++操作符,即自增操作符。自增操作符有两种形式:前置操作和后置操作。前自增操作生成左值,在给操作数加1后返回改变后的操作数值。后自增操作生成右值,给操作数加1但返回未改变的操作数原值。

*事实上,因为C++具有操作符重载的功能,自增操作不仅仅可以表示加1

 

前置操作返回的是加1后的值,返回的是对象本身,所以这是左值。

后置操作返回的是加1前的值,其返回值可以近似的理解为与原操作数值相等的常量,所以是一个右值。

附左值与右值的概念:

 

左值:可以出现在赋值操作左边的值。非const左值可读可写。

右值:可用于赋值操作的右边但不能用于左边的值。右值只能读不能写。

 

左值可以出现在赋值操作右端,但右值不可以出现在赋值操作左端,将后自增操作置于赋值操作左端将会出现编译错误。

另外需要注意:

 

由于后置操作符要返回未加1前的值作为操作的结果,所以必须要保存操作数原来的值,对于比较复杂的类型,这种额外工作可能会花费更大的代价。

建议:只有在必要时才使用后置操作符。

 

最后,让我们用全新的角度去审视C++的命名原因

 

C++之名是Rick Mascitti在1983年夏天定名的(参见The C++ Programming Language(Special Edition)1.4节),C说明它本质上是从C语言演化而来的,“++”是C语言的自增操作符。C++语言是C语言的超集,是在C语言基础上进行的扩展(引入了new、delete等C语言中没有的操作符,增加了面向对象程序设计的直接支持,等等),是先有C语言,再进行++。根据自增操作符前、后置形式的差别,C++表示对C语言进行扩展之后,还可以使用C语言的内容;而写成++C则表示无法再使用C的原始值了,也就是说C++不能向下兼容C了,这与实际情况不符。 

原创粉丝点击