c++继承了c的所有特性,c++在c的基础上同时增加了许多新的语法和特性,c++的目标是实现运行效率与开发效率相统一。
c++中更加强调语言的实用性,所有变量可在使用的时候再定义。例如;
#include <stdio.h>
int main(int argc, char *argv[])
{
int c = 0;
printf("Begin...\n");
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
c += i * j;
}
}
printf("c = %d\n", c);
printf("End...\n");
printf("Press enter to continue ...");
getchar();
return 0;
}
而在c语言中,变量的声明必须在作用域的开始处,否则不能通过编译器。编译报错。
register关键字的变化,在C语言中,register关键字请求编译器将局部变量存储于寄存器中,c语言中无法取得register变量地址。在c++中依然支持register关键字,c++编译器有自己的优化方式,不用register也可做优化,c++中可以取得register变量的地址。当c++编译器发现需要使用register变量的地址时,register变量的声明开始无效。早期的c编译器不能自己实现对代码的优化,因此register变量时一个很好的补充。例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
register int c = 0;
printf("Begin...\n");
printf("&c = %08X\n", &c);
printf("End...\n");
printf("Press enter to continue ...");
getchar();
return 0;
}
在c语言中,重复定义多个同名全局变量是允许的。c语言中多个同名全局变量共同链接到全局数据区的同一片地址空间上。而在c++中,不允许定义多个同名的全局变量。c++直接拒绝这种二义性的作法。例如:
#include <stdio.h>
int g_var;
int g_var = 1;
int main(int argc, char *argv[])
{
printf("Begin...\n");
printf("g_var = %d\n", g_var);
printf("End...\n");
printf("Press enter to continue ...");
getchar();
return 0;
}
c++编译器对const常量的处理,当碰见常量声明时将常量值放入符号表中,若在编译过程中发现使用了常量,则直接以符号表中的值替换即可。编译过程中若发现对const常量进行了extern或&操作,那么就要为对应的常量分配存储空间。c++编译器虽然可能为常量分配存储空间,但不会使用其中的值。
c语言中const变量是只读变量,有自己的存储空间。c++的const常量可能分配存储空间,一是当全局变量extern使用时,二是使用&获取它的地址的时候。
c++中的const常量类似于c语言中的宏定义,不同的是,c语言中宏定义实由预处理器处理,单纯的文本替换。而c++中的const常量则是在编译器中处理,包括类型检查和作用域检查,更加安全。例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
const int a = 1;
const int b = 2;
int array[a + b] = {0};
int i = 0;
for(i=0; i<(a+b); i++)
{
printf("array[%d] = %d\n", i, array[i]);
}
printf("Press enter to continue ...");
getchar();
return 0;
}//c++中的const常量
#include <stdio.h>
void f()
{
#define a 3
const int b = 4;
}
void g()
{
printf("a = %d\n", a);
//printf("b = %d\n", b);
}
int main(int argc, char *argv[])
{
f();
g();
printf("Press enter to continue ...");
getchar();
return 0;
}//c++中的const常量和宏定义的区别
c语言中的struct类型只是定义了一组变量的集合,c语言并不认为这是一种新的类型。而在c++中struct则被认为为一种新的类型。
#include <stdio.h>
struct Student
{
const char* name;
int age;
};
int main(int argc, char *argv[])
{
Student s1 = {"Delphi", 30};
Student s2 = {"Tang", 30};
printf("Press enter to continue ...");
getchar();
return 0;
}
c++中所有变量和函数都必须又声明。c语言中的默认类型在c++中是不合法的。
#include <stdio.h>
f(i)
{
printf("i = %d\n", i);
}
g()
{
return 5;
}
int main(int argc, char *argv[])
{
printf("Begin...\n");
f(10);
printf("g() = %d\n", g(1,2,3,4,5));
printf("End...\n");
printf("Press enter to continue ...");
getchar();
return 0;
}
在c语言中,int f() 表示返回值为int类型的可以接受任意个参数的函数
int f(void)表示返回值为int类型的无参函数
在c++中,int f()和int f(void) 具有相同的意义,都表示返回值为int类型的无参函数。