C++继承了所有C的特性。C++在C的基础上提供了更多的语法和特性。C++的设计目标是运行效率和开发效率的统一。
C++更强调语言的实用性。
C++中所有的变量都可以在需要使用时再定义。
int c = 0;
for (int i = 1; i <= 3; i++) { //在循环中定义变量,是C++的语法,旧式C编译器不支持,但新式C99标准支持
for (int j = 1; j <= 3; j++) {
c += i * j;
}
}
对比:
register关键字请求编译器将局部变量存储于寄存器中:
在C语言中,重复定义多个同名的全局变量是合法的。
在C++中,不允许定义多个同名的全局变量,C++直接拒绝这种二义性的做法。
#include <stdio.h>
int g_v;
//int g_v; // 重复定义全局变量会编译错误
int main(int argc, char *argv[])
{
printf("Begin...\n");
int c = 0;
for(int i=1; i<=3; i++) // C++中合法
{
for(int j=1; j<=3; j++)
{
c += i * j;
}
}
printf("c = %d\n", c);
register int a = 0;
printf("&a = %p\n", &a); // register关键字会失效
printf("End...\n");
return 0;
}
输出结果:
Struct关键字的加强
C++中所有的标识符都必须显示声明类型。
C语言中的默认类型在C++中是不合法的。
看下面一个例子:
f(i) {
printf("i = %d\n", i);
}
g() {
return 5;
}
问题:
在C语言中:
int f()
表示返回值为int,接受任意参数的函数f(void)
表示返回值为int的无参函数在C++中:
int f()和int f(void)
具有相同的意义:表示返回值为int的无参函数#include <stdio.h>
struct Student
{
const char* name;
int age;
};
f(i)
{
printf("i = %d\n", i);
}
g()
{
return 5;
}
int main(int argc, char *argv[])
{
Student s1 = {"lmcjl.com", 30};
Student s2 = {"www.lmcjl.com", 30};
f(10);
printf("g() = %d\n", g(1,2,3,4,5));
return 0;
}
g++编译结果:
gcc编译结果:
本文链接:http://so.lmcjl.com/news/24091/