1、实用性增强
C语言中的变量都必须在作用域开始的位置定义!!
C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
C++中所有的变量和函数都必须有类型
C语言中的默认类型在C++中是不合法的
在C语言中,重复定义多个同名的全局变量是合法的
在C++中,不允许定义多个同名的全局变量
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上
int g_var;
int g_var = 1;
C++直接拒绝这种二义性的做法。
2、register类型检查
void main()
{
register int a = 0;
printf("&a: %d \n", &a); //不能在寄存器变量上取地址
for (int i=0; i<1000; i++) //不使用register也可能做优化
{
printf("i:%d \n", i);
}
system("pause");
}
3、struct类型增强
struct 关键字、class关键字完成的功能是一样的
4、bool类型
5、三目运算符增强
#include
using namespace std;
//在C语言中 表达式的结果放在寄存器
// 在C语言中, 表达式的返回值是变量的值
// 在C++中, 表达式返回的是变量的本身
//让表达式返回一个内存空间 ..内存首地址 指针
//在C语言中如何实现 c++的效果
//本质:c++编译器帮我们完成了取地址的工作
int main()
{
int a = 10;
int b = 20;
int var = 100;
var = 101;
//返回一个最小数 并且给最小数赋值成3
//三目运算符是一个表达式 ,表达式不可能做左值
(a < b ? a : b )= 30;
//int z = (a < b ? a : b );
printf("a = %d, b = %d\n", a, b);
system("pause");
return 0;
}
6、const增强
#include
using namespace std;
//const的基础知识
struct Teacher
{
char name[64];
int age;
};
//指针所指向的内存空间,不能被修改
int operatorTeacher01(const Teacher *pT)
{
//pT->age = 10;
return 0;
}
//指针变量本身不能被修改
int operatorTeacher02( Teacher * const pT)
{
pT->age = 10;
//pT = NULL;
return 0;
}
int operatorTeacher03( const Teacher * const pT)
{
//pT->age = 10;
//pT = NULL; //
printf("age:%d", pT->age);
return 0;
}
//
c语言中的const是一个冒牌货
//C++语言中 const是一个真正的常量
//const分配内存的时机:编译器编译器期间
//const和#define的相同之处:#define,在编译预处理阶段处理,const常量是由编译器处理的,提供类型检查和作用域检查
#define d 20
void main()
{
//int a = 10;
//int b = 20;
//int array[a+b]; //linux内核里面是成立的;原因 编译linux内核的gcc编译器支持.
const int c = 10;
//const int d = 20;
int array2[c+d];
system("pause");
}
//const定义的变量,由编译器处理的,提供类型检查和作用域检查