c++碎片小知识

一.auto

1.复杂的类型名称

如上,这样的类型名字太长,容易出错,大多数同学都能想到typedef,这样想没问题,但是typedef会有一个新的难题,如下:

这两句正确吗?显然,第一句编译不通过。

你以为const pstring 等价于const pstring*吗?不是的这里的const实际上修饰的是p1,也就是说等价于pstring* const,所以p1指针就是一个常量,所以在使用前必须初始化。

分析到这里就可猜出来第二句能够编译通过了。为什么呢?根据形式,可以看出这里的const修饰的是*p2,也就是说,这里的const修饰的是二级指针指向的内容,所以p2依然是个变量,暂时没有初始化也没关系,编译可以通过

所以说,在这种场景下,编译器不会把typedef进行简单的替换。

2.auto使用

1.auto与指针和引用结合

在定义指针时,使用auto或auto*都没有区别,但是在定义引用类型时,必须使用auto&

这里的typeid用来获取表达式/数据类型的类型信息,typeid与sizeof一样,都是操作符,而不是函数。

name()用来返回当前的类型名称

raw_name() 用来返回名字编码(NameMangling)算法产生的新名称。

hash_code() 用来返回当前类型对应的 hash 值,是标识当前类型的整数。

2.在同行定义多个变量

当在同行定义多个变量时,这些变量必须是相同的类型,否则会报错

3.auto不能推导的场景

1.auto不能进行函数参数的推导

2.auto不能直接用来声明数组

二.范围for

如上的for循环可以简化为

注意这里与引用的结合

三.指针空值nullptr

C语言中我们一般都是用NULL。NULL是一个宏定义,在stddef.h头文件中

由文件可知,NULL可能被定义成0,也可能是(void*)0.不论采取何种定义方式,都可能在某些场景下出现问题:

但要是改成nullptr就不会出错了。

nullptr就专门表示指针空值,不再是什么宏定义/宏替换。

使用nulptr时不需要引入头文件,因为它是一个关键字。

sizeof(nullptr)与sizeof((void*)0)一样。

为了提高代码健壮性,最好使用nullptr

相关推荐
OPEN-F7 小时前
C++进阶教程:继承与多态
开发语言·c++
luj_17689 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
刃神太酷啦9 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
leonkay10 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
harmful_sheep10 小时前
java group by常见用法
java·开发语言·python
SKH.10 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
whcyhhh11 小时前
头歌实践教学平台:数据科学与大数据技术导论(十六)
大数据·开发语言·python
萌动的小火苗11 小时前
数据结构面试题【无答案】
c语言·开发语言·数据结构·链表
宸津-代码粉碎机11 小时前
AI工程化高阶实战|从Demo到生产落地核心架构、全套源码与避坑指南
java·大数据·开发语言·人工智能·python·架构
XR12345678812 小时前
办公网自主创新建设怎么选?信创办公场景的选型逻辑
开发语言·php