一、c到c++的升级

原创 2017年01月02日 23:56:57

1.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;
}

2.register关键字的变化:

(1). 在c语言中,register是将变量存在寄存器中,c语言中无法取得该变量的地址,但是在 c++中可以取得register变量的地址, c++编译器发现程序需要取得register变量的地址时,register对变量的声明.无效,这只是早期c++编译器的做法,现代的编译器
根本不会看register
(2). 在c++中,编译器有自己的优化方式,不使用register也可能做优化,有 register只是为了兼容c,要不要无所谓

#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;
}

3.全局变量重定义的变化:

(1). c语言中可以重复定义多个同名的全局变量,这些变量最终会被链接到全局数据区的同一个地址空间
(2). 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;
}

4.const关键字的变化:

(1). const关键字修饰的变量在c++中会变成真正常量,在c中是只读的变量,本质还是变量
(2). c++编译器对const的处理:
当碰见常量声明时在符号表中放入常量
编译过程中若发现使用常量则直接以符号表中的值代替
编译过程中若发现对const使用了extern或者&操作,则给对应的常量分配存储空间
注:虽分配存储空间,但不会使用存储空间中的值(即改变了存储空间的值也没用,编译器不会使用,只会使用符号表中的值)

例子:数组a[c+d]在c语言中会报错,但c++中不会
c++中用const修饰与#define的区别:const是由编译器处理的,会进行类型、作用域等检查,二
宏定义由预处理器处理,只是简单的替换,如define在a函数中定义,在b函数中也可以使用,但是
用const定义的则不可以。如果这都想要define,则可以在函数末尾#undefined a

#include <stdio.h>
int main(int argc, char *argv[])
{
    const int c = 0;
    int* p = (int*)&c;

    printf("Begin...\n");

    *p = 5;//取地址之后就会分配空间,但是会用里边的值

    printf("c = %d\n", c);//p的值仍然为0

    printf("End...\n");

    printf("Press enter to continue ...");
    getchar();  
    return 0;
}
#include<stdio.h>
void g()
{
    #define a 3
    const b = 5;
}
void f()
{
    printf("%d", a);//不会报错,宏是由预处理器来处理的,不会进行类型和作用域的检查
    printf("%d", b);//报错,const常量是由编译器处理,进行类型和作用域的检查
}
int main()
{
    f();
    return 0;
}

5.struct类型的加强:

(1). c语言中的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型
(2). c++中的struct是一个新类型的定义声明

#include <stdio.h>
struct Student
{
    const char* name;
    int age;
};
int main(int argc, char *argv[])
{
    Student s1 = {"Delphi", 30};//注意是用student来定 义而不是用struct可以这样直接用,但在c中报错(c中还                                                               //需要另外定义结构体变量)
    Student s2 = {"Tang", 30};

    printf("Press enter to continue ...");
    getchar();

    return 0;
}

6.类型的加强

(1). c++里所有的变量和函数必须有类型(返回值啊、参数的类型等等都要有)
(2). c语言中的默认类型在c++中是不合法的

如:在c语言里:
int f();表示返回值为int,接收任意参数的函数
int f(void);表示返回值为int的无参函数

c++中:
int f();和int f(void);都表示返回值为int的无参函数

7.c++中的布尔类型:

(1). c++在C语言的基础类型系统之上增加了bool,且bool可取的值只有true和false
(2). 理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占用一个bit(注意是bit不是字节),这取决于编译器的实现
(3). true代表真值,编译器内部用1来表示,false代表非真值,编译器内部用0来表示,且只能是0和1
(4). true、false、bool在c++里都是关键字了

例子:
bool a = true;
a = 3;
b = a;
结果a和b的值都是1而不是3,但是a = 0;则最后是0,说明bool只有true和false两个值
为了兼容c语言,bool也可以参与数学运算,但是会将最终得到非零值就转化为true,得到零就转换为false

8.三目运算符

(1).c语言里三目运算符不能当左值,只能当右值
(2).c++里可以既可以做左值也可以当右值,但三目运算符可能的返回值中只要有一个是常量就不可以做左值
例子:
int a = 1;
int b = 2;
(a

c++学习笔记(1.c到c++的升级)

本节知识点: 1.c++与c语言关系是包容的,不是对立的,c++继承了c的所以特性。c语言注重程序的运行效率,c++更注重程序的运行效率与开发效率的统一。本节我们就说说一些c++对c的加强。 2.变量...

C++对C的升级

1.声明和定义 我们在c语言中,通常把变量的声明放在文件开头,即所有要用到的变量统一定义,而在c++中,我们可以把变量的定义放在快要用到的时候,例如,for语句,在c中我们是 int i = 3;...

C到C++的升级

const 在C中只是个“只读变量”,并不是真正意义上的常量,通过指针能改变它,如下 #includeint main(){ const int a=0;//声明只读变量a为0 int ...

C到C++的升级

C到C++的升级

1.C到C++的升级

/****************************************************************  这是看了唐老师的C++视频后的学习笔记,记录自己每天的进步! ...

从c到c++的升级

1.声明定义 C++可以在需要使用时再定义2.register关键字的升级 ·C++中可以取得register变量的地址3.const关键字 ·const修饰的变量不可变,也不可通过空间修改,即...

c/c++实现获取NOD32升级账号密码

功能有待完善和添加 #include #include #include #include #include #include #include using namespa...

C到C++的升级(学习笔记)

对比一些C语言与C++的特性,方便更好的理解和学习C++
  • lai_ze
  • lai_ze
  • 2017年03月17日 17:07
  • 152

c++基础学习1-c的升级c++

c++与c的关系:

C++中 函数的升级---内联函数、默认参数、占位参数、函数重载、C与C++结合

C++中 函数的升级---内联函数、默认参数、占位参数、重载、C与C++结合
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一、c到c++的升级
举报原因:
原因补充:

(最多只允许输入30个字)