做视频网站需要什么证书,网站建设与维护费用,财务公司网站开发源码,wordpress截取字符串文章目录 一、auto关键字(C11)1、auto简介2、auto使用规则1、 auto与指针和引用结合起来使用2、 在同一行定义多个变量 3、auto不能推导的场景1、 auto不能作为函数的参数2、 auto不能直接用来声明数组3、特性总结 二、基于范围的for循环(C11)1、范围for的语法2、 范围for的使用… 文章目录 一、auto关键字(C11)1、auto简介2、auto使用规则1、 auto与指针和引用结合起来使用2、 在同一行定义多个变量 3、auto不能推导的场景1、 auto不能作为函数的参数2、 auto不能直接用来声明数组3、特性总结 二、基于范围的for循环(C11)1、范围for的语法2、 范围for的使用条件 三、指针空值nullptr(C11)1、 头文件中NULL的值2、NULL的不足3、特性总结 一、auto关键字(C11) 1、auto简介
在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量但遗憾的是一直没有人去使用它大家可思考下为什么 C11中标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得。 由上图可知auto会自动给变量定义类型。 但是当auto没有初始化时就无法通过如下图所示 使用auto定义变量时必须对其进行初始化在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明而是一个类型声明时的“占位符”编译器在编译期会将auto替换为变量实际的类型。 2、auto使用规则 1、 auto与指针和引用结合起来使用 用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须加 但如果auto声明引用类型时不加的话从下图中可以看出c的改变不会导致x的改变也就是说没有引用成功。 2、 在同一行定义多个变量
当在同一行声明多个变量时这些变量必须是相同的类型否则编译器将会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。 3、auto不能推导的场景
1、 auto不能作为函数的参数 2、 auto不能直接用来声明数组 3、特性总结 1、 为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法 2、 auto在实际中最常见的优势用法就是跟以后会讲到的C11提供的新式for循环还有lambda表达式等进行配合使用。 二、基于范围的for循环(C11) 1、范围for的语法
对于一个有范围的集合而言由程序员来说明循环的范围是多余的有时候还会容易犯错误。因此C11中引入了基于范围的for循环。for循环后的括号由冒号“ ”分为两部分第一部分是范围内用于迭代的变量第二部分则表示被迭代的范围。
注意与普通循环类似可以用continue来结束本次循环也可以用break来跳出整个循环。 2、 范围for的使用条件
for循环迭代的范围必须是确定的 对于数组而言就是数组中第一个元素和最后一个元素的范围对于类而言应该提供begin和end的方法begin和end就是for循环迭代的范围。 三、指针空值nullptr(C11)
1、 头文件中NULL的值
NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码 2、NULL的不足
可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void*)的常量。不论采取何种定义在使用空值的指针时都不可避免的会遇到一些麻烦比如 程序本意是想通过f(NULL)调用指针版本的f(int*)函数但是由于NULL被定义成0因此与程序的初衷相悖。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器默认情况下将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 而nullptr新引入的关键字可以很好的解决这个问题 3、特性总结
1、在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。 2、 在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 3.、为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。