1、命名空间
2、实用性增强
C语言中的变量都必须在作用域开始的位置定义;C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
#include <stdio.h>
int main()
{
int i=0;
printf("hello...\n");
int k;
return 0;
}
在vc6.0中(使用的是c编译器)编译出错;vs中(使用c++编译器)编译通过
3、register关键字增强
register关键字,请求编译器让变量a直接放在寄存器里面,速度快。
在C语言中register修饰的变量不能取地址;
在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可以优化,C++可以取得register变量的地址。
#include <stdio.h>
int main()
{
register int a=0;
printf("&a=%x\n",&a);
system("pause");
return 0;
}
4、变量检测增强
在C语言中,重复定义多个同名的全局变量是合法的。
在C++中,不允许定义多个同名的全局变量。
#include <stdio.h>
int a;
int a=100;
int main()
{
printf("a=%d\n",a);
return 0;
}
5、struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。
C++中的struct是一个新类型的定义声明。
#include <stdio.h>
struct Student
{
char name[32];
int age;
};
int main()
{
struct Student t1;
t1.age=10;
printf("age=%d\n",t1.age);
return 0;
}
6、C++中所有的变量和函数都必须有类型
#include <stdio.h>
f(i)
{
printf("i=%d\n",i);
}
g()
{
return 5;
}
int main(int argc,char*argv)
{
f(10);
printf("g()=%d\n",g(1,2,3,4,5));
return 0;
}
C++中正确代码应该是:
#include <iostream>
void f(int i)
{
printf("i=%d\n",i);
}
int g(int ,int ,int ,int ,int )
{
return 5;
}
int main(int argc,char*argv)
{
f(10);
printf("g()=%d\n",g(1,2,3,4,5));
system("pause");
return 0;
}
7、新增Bool类型关键字
C++中的布尔类型
C++在C语言的基本类型系统之上增加了 bool。C++中bool类型只有true(非0)和false(0)两个值。bool理论上只占用一个字节。
#include <iostream>
using namespace std;
int main(int argc,char*argv)
{
bool b1=true;
cout<<"sizeof(bool):"<<sizeof(bool)<<endl;
b1=10;
bool b2=-10;
cout<<"b1="<<b1<<endl;
cout<<"b2="<<b2<<endl;
system("pause");
return 0;
}
8、三目运算符功能的增强
#include <stdio.h>
int main(int argc,char*argv)
{
int a=10;
int b=20;
(a<b?a:b)=30; //返回一个最小数,并且给最小数赋值成30//三目运算符是一个表达式,表达式不可能做左值
printf("a=%d,b=%d\n",a,b);
return 0;
}
在C语言中,表达式的结果放在什么地方?寄存器。
在C语言中,表达式的返回值是变量的值。a=10 =30;
在C++中,表达式返回变量的本身。
在C语言中实现C++的效果:
#include <stdio.h>
int main(int argc,char*argv)
{
int a=10;
int b=20;
*(a<b?&a:&b)=30; //返回一个最小数,并且给最小数赋值成30//三目运算符是一个表达式,表达式不可能做左值
printf("a=%d,b=%d\n",a,b);
return 0;
}