C/C++(C++类型增强)

C++类型增强

类型检查更严格

把一个const类型的指针赋给非const类型的指针。c语言中可以通的过,但是在c++中则编不过去

const int a = 10;
a = 100;//const修饰的不能修改
int *p = &a;
*p = 100;
printf("a = %d
",a);//a = 100,c里面类型不严密,指针能修改const修饰的变量,实际是a是const int *类型,也就是说强行的赋给int *,把const漏掉了。
const int a与int const a一样,看const修饰谁把类型去掉。
int *const p;把int去掉,p不能改变,p指向的内容可以改变。
const int *const p;它指向的本身和内容都不能改变。
#include<iostream>
using namespace std;
int main() {
    const int a = 100;//const修饰的必须要初始化
    int *p = &a;//不可以报错 const int *无法转化成int *;
    const int *p = &a;//才是正确的
    //C++不需要强转
    char *p = malloc(100);//C++会报错
    char *q = (char*)malloc(100);//void *

    return 0;
}

布尔类型(bool)

c 语言的逻辑真假用 0 和非 0 来表示。而 c++中有了具体的类型。

int main()
{
    bool flag = true;
    if(flag)
        printf("hello world!
");
    else
        printf("hello C++!
");

    return 0;
}

真正的枚举(enum)

c 语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而 c++中枚举变量,只能用被枚举出来的元素初始化。

bool用枚举实现过程:

#include<iostream>
enum BOOL
{
    FALSE,TURE
};
int main()
{
    const int a = 100;
    BOOL flag = TRUE;
    bool aa = true;
    if(flag)
        cout<<a;
        printf("sizeof(flag) = %d sizeof(BOOL) = %d sizeof(bool) = %d
",sizeof(flag),sizeof(BOOL),sizeof(bool));
}
//sizeof(flag) = 4 sizeof(BOOL) = 4 sizeof(bool) = 1
//enum枚举本质是整型

它和即将所学的string类型并不是实际意义上的数据类型而是一个对象。

enum SEASOM
{
    Spr,Sum,Autu,Win
};
int main()
{
    SEASON s;
    s = Win;//在C++中比较严格,除了枚举外的无法赋值。c里面就可以赋其他值。
    return 0;
}

其实枚举可以和宏来等价

#define Spr 0
#define Sun 1
....


enum
{
    Spr = 1,Sum,Autu,Win
};

在C++中经可能的使用枚举,const代替使用宏。

表达式的值可被赋值

c:

int main()
{
    int a,b=10;
    a = b = 100;//100赋值给b,b = 100这个表达式赋值给a。
    (a = b) = 100;//错误,表达式是不可被赋值的
    (a != b?a:b) = 1000;//错误
    return 0;
}

c++

int main()
{
    int a,b = 5;
    (a = b) = 100;
    printf("a = %d b = %d
",a,b);
    (a != b?a:b) = 1000;
    printf("a = %d b = %d
",a,b);
    return 0;
}
//a = 100,b = 5;
//a = 1000,b = 5
//a = b是一个表达式,b的值赋值给a,最后把100的值赋值给a,b的值没发生变化。

体现C++对C语言的限制与提升

cin cout类对象

scanf printf函数的功能相同

int main()
{
    char name[30];
    scanf("%s",name);//不安全的输入,输入很多会挂机
    fgets(name,30,stdin);//最多只能输入29个字符,比较安全。

    cin>>name;//>>流输入运算符
    cout<<"name = "<<name<<endl;
//"name = "字符串流入cout对象,name流入cout对象,endl(换行)流入cout对象中,从左至右的顺序。

    string name1;
    cin>>name1;
    cout<<name1;
    //很安全,输多少都不会挂机
    cin>>a>>b;//有顺序,从键盘输入的第一个数流入a,第二个数流入b
    //<=>
    cin>>a;
    cin>>b;

    return 0;
}
原文地址:https://www.cnblogs.com/intelwisd/p/8503398.html