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/