C++对C的增强

来源:互联网 发布:网页修改上传软件 编辑:程序博客网 时间:2024/05/20 19:14

最近比较清闲,就把以前学过的知识都整理一下,放在这里,以后有新的东西会补充进来。

C++就是在C的基础上进行增强,扩展,主要从以下几个方面说:

1:namespace 命名空间  

C++命名空间的定义:namespace name {....}  

1.1  namespace:标识符的各种可见范围, std是C++标准命名空间。

C++标准程序库中的所有标识符都被定义于名为std的标准命名空间中。

1.2  C中的命名空间:

在C语言中只有一个全局作用域,C语言中的所有的全局标识符共享同一个作用域,标识符之间可能发生冲突。

C++中的命名空间:

命名空间将全局作用域(全局作用域也叫默认命名空间)分成不同的部分,不同命名空间中的标识符可以同名而不发生冲突,命名空间可以相互嵌套。

1.3  使用命名空间:

使用整个命名空间: using namespace name;

使用命名空间中的变量:using name:: variable;

# include <iostream>using namespace std;namespace nameyou{double you = 6.02;}namespace nameme{double you = 9.04;namespace nameour{struct child{char name[32];int age;};}}void main(){cout << nameyou::you << endl;cout << nameme::you << endl;nameme::nameour::child c1;c1.age = 16;cout << c1.age << endl;    /*这样也行 using nameme::nameour::child;child c1;c1.age = 16;cout << c1.age << endl;*/system("pause");}

2:“实用性”增强

c++更强调语言的“实用性”,所有变量都可以在需要使用时再定义。

3:register关键字增强

3.1 register关键字请求“编译器”将局部变量存储于寄存器中。C预言无法取得register变量地址,C++中依然支持register关键字。

# include <iostream>int main(void){register int i = 10;printf("&i: %d\n",&i);int k = 11;printf("i:%d\n k:%d\n",i,k);}

3.2 C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

3.3 C++编译器有自己的优化方式,不使用register也能做优化。

比如在for循环中频繁使用i,C++编译器会做优化,把i放到寄存器里,加快程序执行速度。

4:变量检测增强

在C语言中,重复定义多个同名的全局变量是合法的。C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。

# include <stdio.h>int g_a = 100;int g_a;void main(){printf("hello...g_a:%d\n",g_a);system("pause");}

在C++中,不允许定义多个同名的全局变量。double you ; double you = 6.02; C++直接拒绝这种二义性的做法。

5:struct关键字类型加强

C语言中的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。

C++中的struct是一个新类型的定义声明。

struct关键字和class关键字完成的功能是一样的,区别后面再说。


6:C++中所有的变量和函数都必须有类型


7:新增bool类型关键字



# include <iostream>using namespace std;void main(){bool b1 = true;bool b2, b3, b4, b5;cout << "sizeof(bool):\n" << sizeof(bool) << endl;b1 = 10;cout << "b1:" << b1 << endl;b2 = -20;cout << "b2:" << b2 << endl;b3 = 0;cout << "b3:" << b3 << endl;}


8:三目运算符功能增强

回顾三目运算符(条件运算符)

表达式1 ? 表达式2 : 表达式3

若表达式1为真,则返回表达式2的值,否则返回表达式3的值。

例如:返回一个最小数,并且给最小数赋值成30

(a<b? a : b) = 30;

这在c中会报错,怎么改?

# include <iostream>int  main(){int a = 10;int b = 20;*(a < b ? &a : &b) = 30;printf("a=%d,b=%d\n",a,b);system("pause");}