C到C++的升级

2017-10-14  本文已影响0人  nethanhan

1、C++

2、实用性

C++更强调语言的实用性
所有的变量都可以再需要使用时再定义

for(int i=1; i<=3; i++)
{
        for(int j=1; j<=3; j++)
        {
            c += i * j;
        }
}

但是在C语言中变量都必须在作用域开始的位置定义

3、register关键字

register关键字请求编译器将局部变量存储于寄存器中

4、二义性

5、struct关键字

//c中结构体的定义
typedef struct _tag_student Student;
struct _tag_student
{
    const char* name;
    int age;
}
//C++中结构体的定义
struct Student
{
    const char* name;
    int age;
}

上述2端代码是C与C++中结构体的等价定义

6、默认类型

7、const

C与C++中的const变量比较

#include <stdio.h>

int main()
{
    const int c = 0;
    int* p = (int*)&c;
    
    printf("Begin...\n");
    
    *p = 5;
    
    printf("c = %d\n", c);
    
    printf("End...\n");
    
    return 0;
}

上述代码在c语言中运行 , 变量c会输出5;

但是在c++语言中运行,常量c会输出0, 但是变量*p 会输出5.

#include <stdio.h>

void f()
{
    #define a 3
    const int b = 4;
}

void g()
{
    printf("a = %d\n", a);
    //printf("b = %d\n", b);
}

int main()
{
    const int A = 1;
    const int B = 2;
    int array[A + B] = {0};
    int i = 0;
    
    for(i=0; i<(A + B); i++)
    {
        printf("array[%d] = %d\n", i, array[i]);
    }
    
    f();
    g();
    
    return 0;
}

上述代码中

    const int A = 1;
    const int B = 2;
    int array[A + B] = {0};

这个代码段在C语言中是编译不通过的,因为编译器无法确定变量A与变量B的具体值;但是在c++语言中是可以编译通过的,因为编译器可以确定常量A与常量B的值,自然也就能确定array的大小。

8、BOOL类型

C++中的布尔类型

举例:

bool b = 0;
printf("b = %d \n", b);

b++;
printf("b = %d \n", b);

b=b-3;
printf("b = %d \n", b);

上述代码会输出:

b = 0
b = 1
b = 1

因为b不管为什么值,只要它为非0,编译器都会认为它为true, 也就是1;
只要它为0,编译器都会认为它为false, 也就是0。

3、三目运算符

C++对三目运算符进行了升级。

举例:

int a = 1;
int b = 2;

(a < b ? a : b) = 3;
printf("a = %d, b = %d\n", a, b); 

上述代码如果是在c编译器编译会报错,因为c中规定三目运算符不能出现在等号的左侧;
但是在c++编译器会通过,输出 a = 3, b = 2 ,因为在c++语言中,在三目运算符会返回变量的情况下,会允许出现在等号左侧。

1、c语言中的三目运算符返回的是变量值,不能作为坐值使用。
2、c++中的三目运算符可直接返回变量本身,既可作为右值使用,又可作为左值使用
3、三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
上一篇 下一篇

猜你喜欢

热点阅读