码迷,mamicode.com
首页 > 编程语言 > 详细

C到C++的升级

时间:2019-10-19 20:26:31      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:无法   多个   软件学院   目标   面试题   课程   存在   作用   异常   

0x01 C与C++的关系

  • C++继承了所有C的特性
  • C++在C的基础上提供了更多的语法和特性
  • C++的设计目标是运行效率与开发效率的统一

C++ 以C语言为基础,增加了对面向对象的支持,并做了类型加强、函数加强、异常处理等优化。

0x02 C到C++的升级

  1. C++更强调语言的实用性

  2. 所有的变量都可以在需要使用时再定义(在C语言中的变量都必须在作用域开始的位置定义)

  3. C++中依然支持register关键字,但是C++编译器有自己的优化方式
    • C语言中无法获取register变量的地址
    • C++中可以取得register变量的地址
    • C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
  4. C++中不允许定义多个同名的全局变量(C中重复定义多个同名的全局变量是合法的,这些同名的全局变量最终会被链接到全局数据区的同一个地址空间)

  5. struct关键字的加强
    • C语言中的struct定义了一组变量的集合
    • C语言中struct定义的标识符并不是一种新的类型
    • C++中的struct用于定义一个全新的类型
  6. C++中所有的标识符都必须显示的声明类型(C语言中的默认类型在C++中是不合法的)

0x03 实例分析一

对上述的C到C++升级的特性(1、2、3、4),用代码的方式直观的来感受

#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++)
    {
        for(int j=1; j<=3; j++)
        {
            c += i * j;
        }
    }
    
    printf("c = %d\n", c);
    
    register int a = 0;
    
    printf("&a = %p\n", &a);
    
    printf("End...\n");
    
    return 0;
}

上面贴出的代码用来感受C++的以下三个特性:

  • 所有的变量都可以在需要使用时再定义

    for(int i=1; i<=3; i++)
        {
            for(int j=1; j<=3; j++)
            {
                c += i * j;
            }
        }
  • C++中可以取得register变量的地址

    register int a = 0;
    
    printf("&a = %p\n", &a);
  • C++中不允许定义多个同名的全局变量

    #include <stdio.h>
    
    int g_v;
    int g_v;

编译运行结果

  • C语言编译运行结果:

技术图片

  • C++ 编译运行结果:

技术图片

实例分析二

对上述的C到C++升级的特性(5、6),用代码的方式直观的来感受

#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 = {"Delphi", 30};
    Student s2 = {"Tang", 30};
    
    f(10);
    
    printf("g() = %d\n", g(1,2,3,4,5));
    
    return 0;
}

上面贴出的代码用来感受C++的以下两个特性:

  1. struct关键字的加强
    • C语言中的struct定义了一组变量的集合
    • C语言中struct定义的标识符并不是一种新的类型
    • C++中的struct用于定义一个全新的类型

C和C++中结构体的等价定义如下:

//C语言定义如下:
typedef struct _tag_student Student;
struct _tag_student
{
    const char* name;
    int age;
};

//C++定义如下:
struct Student
{
    const char* name;
    int age;
}
  1. C++中所有的标识符都必须显示的声明类型

    • 在C语言中:
      • int f()表示返回值为int,接受任意参数的函数
      • f(void)表示返回值为int的无参数函数
    • 在C++中:
      • int f()与int f(void)具有相同的意义:表示返回值为int的无参函数

0x04 一道面试题的回答

int f()与int f(void)有区别吗?

有区别,也没有区别,有没有区别要看是在C语言中使用还是在C++中使用,如果在C中,那就是有区别,在C++中那就没有区别了,因为在C++中所有的标识符都必须显示的声明类型,不允许二义性存在,这是对C的一个升级,因为在C中参数为空时,可以接收任意多个参数。

以上的知识点均来源于狄泰软件学院唐老师的课程

C到C++的升级

标签:无法   多个   软件学院   目标   面试题   课程   存在   作用   异常   

原文地址:https://www.cnblogs.com/ldhbetter/p/11704837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!