笔记:C++类型检查增强( const、指针规范、nullptr)

笔记:C++类型检查增强( const、指针规范、nullptr)

1、const

在C语言中定义了const类型:

const int a = 5;

a = 100;

error C2166: 左值指定 const 对象

 const int a 不能作为左值而被赋值,然而在C中const类型的值真的不能修改了吗?

#include<stdio.h>

int main()
{
    const int a = 5;
    int *p = &a;
    *p = 100;
    printf("a = %d",a);

    return 0;
}

结果:

a = 100;

可见,C中的const类型可以用指针修改,并不是真正的const

如果上面这段代码出现在C++中那么编译器会报错:试图将 const int* 型赋给 int * 型

若改正,则只需将 int *p 改为 const int *p (意思为(*p)的值不能改变(指针p的值可以改变)与 int * const p 有区别

在C++中,此时的 const 才是真正的const

如指针、引用之类的都不能改变const的值(编译器会报错),这样就能在编译的时候检测出更多的错误,减少调试的工作量

2、指针规范

#include<stdio.h>

int main()
{
	int i;
    int arr[2][4]={{1,2,3,4},
                   {5,6,7,8}};
	int *p = arr;
	p++;
    for(i =0 ;i <4;i ++)
	    printf("%d",p[i]);
    return 0;

}

结果:

2345

上面的代码放到C++中会报错:将 int *[4]转换为 int * ;

如果你想要的结果是:5678,那这个 p 显然不是你想要的 p

错误的原因是:数组与指针的类型区别没有弄明白(其实 arr 的数据类型为 int (*)[4])

需出如下修改:

    int (*p)[4] = arr;
    p++;
    for(i =0 ;i <4;i ++)
        printf("%d",(*p)[i]);

可见C++增强了对类型的检查

3、nullptr

在C库中,有#define NULL 0

让指针为空可以写为:p = 0; 或 p = NULL;

在C++中开放了重载的功能,于是就有了一下的情况:

#include<iostream>

void func(int *){cout<<"NULL";}
void func(int){cout<<"0";}
int main()
{
    func(NULL);func(0);
    return 0;
}

结果:

00

函数的调用并没有出问题,因为宏替换就是把NULL换成0

那你说我要调用第一个函数怎么办呢,这里C++定义了一个关键字:nullptr

将 nullptr 取代NULL即可调用,在C++中空指针一律用nullptr赋值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值