[006]为什么C++会被叫做是C++?
2014-03-31 15:14
127 查看
先了解一下自增和自减的运算符:
自增(++)和自减(--)操作符为对象提供加1或减1操作:
int i = 0, j;
j = ++i; // j = 1, i = 1: prefix yields incremented value
j = i++; // j = 1, i = 2: postfix yields unincremented value
因为前置操作返回加1后的值,所以返回对象本身,这是左值。而后置操作返回的则是右值。
一个具体的例子来区分这个左值和右值:
显示结果为:
前置操作需要做的工作更少,只需要加1后返回加一后的结果即可。而后置操符必须先保存操作数原来的值,以便返回加一之前的值作为操作的结果。
对于int型对象和指针,编译器可能优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。
------------------------------------------------------------------------------------------------------------------------------
再回到C++为什么是C++这个问题上来,为什么不是++C呢?
C++的C说明了它本质上是从C语言演化过来的,C++语言是C语言的超集,是在C语言基础上进行的扩展(引入了new、delete等C语言中没有的操作符,增加了面向对象程序设计的支持,等等),是先有C语言,在进行C++。
根据自增操作符前、后置形式的差别,C++表示对C语言进行扩展之后,还可以使用C语言的内容,而写成++C则表示无法再使用C的原始值了,也就是说C++不能向下兼容C了,这与实际情况不符。
自增(++)和自减(--)操作符为对象提供加1或减1操作:
int i = 0, j;
j = ++i; // j = 1, i = 1: prefix yields incremented value
j = i++; // j = 1, i = 2: postfix yields unincremented value
因为前置操作返回加1后的值,所以返回对象本身,这是左值。而后置操作返回的则是右值。
一个具体的例子来区分这个左值和右值:
#include <iostream> using namespace std; void F(int a) { cout << a <<endl; } int main() { int i = 0; F(i); ++i = 10; // OK ++i is a l-value // i++ = 20; // Error i++ is a r-value F(i); return 0; }
显示结果为:
svpm-dev# ./foo 0 10
前置操作需要做的工作更少,只需要加1后返回加一后的结果即可。而后置操符必须先保存操作数原来的值,以便返回加一之前的值作为操作的结果。
对于int型对象和指针,编译器可能优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。
------------------------------------------------------------------------------------------------------------------------------
再回到C++为什么是C++这个问题上来,为什么不是++C呢?
C++的C说明了它本质上是从C语言演化过来的,C++语言是C语言的超集,是在C语言基础上进行的扩展(引入了new、delete等C语言中没有的操作符,增加了面向对象程序设计的支持,等等),是先有C语言,在进行C++。
根据自增操作符前、后置形式的差别,C++表示对C语言进行扩展之后,还可以使用C语言的内容,而写成++C则表示无法再使用C的原始值了,也就是说C++不能向下兼容C了,这与实际情况不符。
相关文章推荐
- 一个有意思的问题:你认为为什么C++不叫做++C?
- C/C++实践笔记 006
- C++的模板为什么要在头文件(.h)中实现?
- C++为什么不提倡使用scanf和printf函数
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- C++为什么不建议使用malloc,calloc,realloc来分配内存?
- 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
- C++ 为什么析构函数不能抛出异常问题
- C++析构函为什么要用虚函数以及其作用
- c++之我们为什么选择使用智能指针
- 一、从Java、C#到C++ (为什么C++比较难)
- 立此存照26[C++]为什么VS2013不能显示析构函数中的输出语句
- 为什么还有这么多人用C++写服务端?
- 在C++中调用被C编译器编译后的函数,为什么要加extern "C"
- 『C/C++』[C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托
- 为什么说C++不是完全面向对象的语言
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 【转】C++的继承与多态:为什么需要虚函数
- 为什么C++不提供override这个关键字呀?
- c++ 为什么要引入 "引用&"