C++对C语言的升级(一)

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

C++对C的升级

C语言 C Plus 以C语言为基础的升级 包括: 变量的声明 重复定义全局变量 register关键字升级 struct关键字升级 const关键字升级 函数的类型声明 三目元算符的返回值类型改变 …… 面向对象的支持 类型加强 函数加强 异常处理 …… C语言 C Plus

以C语言为基础的升级

1,变量的声明

  • C++中的所有变量都可以在使用的时候再去定义
  • C语言中的变量都必须在作用域开始的位置定义
	int a = 0;
	for (int i = 1; i < 3; i++)//这里的i是在循环中定义的,是C++的语法
	{
     
		a++;
	}

2,重复定义全局变量

在C语言中,重复定义多个同名的全局变量是合法的。

  • C语言中,多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。

在C++中,则不允许定义多个同名的全局变量,C++直接拒绝这种二义性的做法。

#include "iostream"

int g_v;
//int g_v=1; // 重复定义全局变量在C++中会编译错误

3,register关键字的升级

  • C语言中,register关键字是请求编译器让其定义的变量尽可能存放在CPU内部寄存器中,而不是通过内存寻址来访问,用来提高访问的效率,因此,在C语言中无法取得register变量的地址。
  • C++中仍然支持register关键字,且对其做出了优化,当C++编译器发现程序中需要取register变量的地址时,register对变量的声明就会变得无效。
 register int a = 0;

 printf("&a = %p\n", &a); // register关键字失效

4,struct关键字的升级

  • C语言的struct 定义了一组变量的集合,C编译器并不认为这是一种新的类型。
  • C++中的struct 是一个新类型的定义声明。
//C中的结构体
    typedef struct _tag_student Student;
    struct _tag_student 
    {
     
        const char * name;
        int age;
    };

等价于

//C++中的结构体
struct Student
    {
     
        const char *name;
        int age;
    };

5,const关键字的升级

const是一个C语言的关键字,具有着举足轻重的地位。 它限定一个变量不允许被改变,产生静态作用。 使用const在一定程度上可以提高程序的安全性和可靠性。

  • 当碰见const常量声明时在符号表中放入常量。
  • 编译过程中若发现对const使用了extern或者&操作符,则给对应的const常量分配存储空间。
#include "iostream"

int main(int argc, char *argv[])
{
     
    const int c = 0;      /* const常量 */
    int* p = (int*)&c;    /* 对常量c分配了存储空间 */
    
    printf("Begin...\n");
    
    *p = 5;    /* C++不允许const常量被修改 */
    
    printf("c = %d\n", c);
    
    printf("End...\n");
    
    printf("Press enter to continue ...");
    getchar();
    
    return 0;
} 

C++对C语言的升级(一)_第1张图片
在C语言中,const变量是只读变量,有自己的存储空间。而在C++中,可能分配存储空间。(当const常量为全局,并且需要在其它文件中使用。当使用&操作符取const常量的地址)

6,变量和函数的类型

  • C++中的所有变量和函数都必须有类型
  • C语言中的默认类型在C++中是不合法的
  • 在C语言中
    • int f();表示返回值为int,接受任意参数的函数。
    • int f(void);表示返回值为int的无参函数。
  • 在C++中
    • int f();和int f(void)具有相同的意义,都表示返回值为int的无参函数。

在C++中如果不定义函数的参数类型,就不能再后面的应用当中加入参数

#include 
 
f(i)    /* 没有指明函数返回类型 */
{
     
    printf("i = %d\n", i);
}
 
g()    /* 没有指明函数返回类型,并且调用g()函数的时候不能进行传参 */
{
     
    return 5;
}
 
int main(int argc, char *argv[])
{
     
    printf("Begin...\n");
    
    f(10);
    
    printf("g() = %d\n", g());
    
    printf("End...\n");
    
    printf("Press enter to continue ...");
    getchar();
    
    return 0;
}

在这里插入图片描述

7,bool(布尔)类型

C++在C语言的基本类型系统上增加了bool类型,bool可取的值只有true和false,并且只占用一个字符。
true代表真值,编译器内部用1来表示。false代表非真值,编译器内部用0来表示。

#include "iostream"
 
int main()
{
     
    int a;
    bool b = true;
    
    printf("b = %d, sizeof(b) = %d\n", b, sizeof(b));
    
    b = 3;
    a = b;
    
    printf("a = %d, b = %d\n", a, b);
    
    printf("Press enter to continue ...");
    getchar();
    
    return 0;
}

在这里插入图片描述

8,三目运算符的升级

  • C语言中的三目运算符返回的是变量值,不能作为左值使用
  • C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方
    C++中三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。
(a < b ? a : b) = 1;

你可能感兴趣的:(C++学习,c++,c语言)