初识C++(4)---C++入门-创新互联

文章目录
  • 内联函数
    • 概念
    • 特性
  • auto关键字
    • auto使用的一些规则
  • 基于范围的for循环
    • 范围for的语法
    • 范围for的使用条件
  • 指针空值nullptr

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站建设、鹰手营子网络推广、微信小程序定制开发、鹰手营子网络营销、鹰手营子企业策划、鹰手营子品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供鹰手营子建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
内联函数 概念

以inline修饰的函数叫做内联函数,在编译的时候,

C++的编译器会将内联函数展开在调用内联函数的地方

(不是无条件的展开,这取决于编译器,后面有详细分析),这没有函数压栈的开销,

所以内联函数可以提升程序运行的效率。

特性

inline是一种以空间换时间的做法,虽然省去了函数调用的系统开销,

但是展开代码使得代码量增加,所以,在代码很长,或者有循环和递归的函数

就不适宜使用内联函数了,即使使用了编译器也会判断是否适合展开,

有的编译器认为,代码超过十行命令就是长代码,就不会展开内联。

inline内联不建议将声明和定义分离,分离之后会导致链接出现错误,

因为inline被展开之后,就没有函数地址了,链接的时候会找不到函数地址。


auto关键字

auto关键字在C语言中没有什么价值,

在C++11中,auto有了新的含义:

auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,

auto声明的变量必须由编译器在编译时期推导而得。

说通俗一点就是,auto可以自动识别变量的类型,下面简单的验证一下

在这里插入图片描述
需要注意的是:使用auto定义变量时必须对其进行初始化,

因为在编译阶段编译器需要根据初始化的内容来推导auto的类型是什么。

所以说,auto不是一种类型声明,而是一个类型声明的“占位符”,

编译器编译的时候就将auto替换成实际的类型。

auto使用的一些规则

auto可以和指针和引用结合使用,

auto定义指针类型时,用auto和auto*没有任何区别,

但用auto声明引用类型时则必须加&

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,

因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

在这里插入图片描述

auto也不是所有的地方都可以使用,

auto不可以作为函数的参数

auto不可以用来声明数组类型

auto的实际用法并不是简单的像上面的使用,

当变量的类型名很长的时候就很适合用auto,还有其他的用法在后续的学习再了解。


基于范围的for循环 范围for的语法

对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。

因此C++11中引入了基于范围的for循环。

for循环后的括号由冒号“ :”分为两部分:

第一部分是范围内用于迭代的变量,

第二部分则表示被迭代的范围。

int main()
{//遍历数组
	int arr[] = {1,2,3,4,5,6,7,8,9 };

	//平常做法
	for (int i = 0; i< sizeof(arr) / sizeof(int); i++)
	{cout<< arr[i]<< " ";
	}
	cout<< endl;
	//范围for
	for (auto ret: arr)
	{cout<< ret<< " ";
	}
	return 0;
}

范围for也和普通的循环类似,可以用continue结束本次循环,用break跳出整个循环。

范围for的使用条件

for循环迭代的范围必须是确定的,

对于数组来说,就是数组中的第一个元素和最后一个元素。

对于类来说,就要提供确定开头begin和结尾end的方法,[begin,end]就是循环迭代的范围。


指针空值nullptr

在C语言中,对于指针的初始化,一般都是给NULL,

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

这就是条件编译的应用了,NULL定义为字面常量0,或者被定义为无类型指针(void*)的常量。

在C语言中使用NULL来对指针进行置空没有任何问题,但是在C++中,可能会出现问题

在这里插入图片描述
在这段代码中,我想要调用的函数应该是指针的Func(),

但是NULL被定义成了0,所以就调用了别的函数。

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,

但是编译器默认情况下将其看成是一个整形常量,

如果要将其按照指针方式来使用,必须对其进行强制类型转换(void *)0。

所以在C++中,指针的置空更推荐使用nullptr,

使用nullptr的时候不用包含头文件,这是C++11的关键字,

在C++11中,sizeof(nullptr)与sizeof((void)0)所占的字节数相同

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻标题:初识C++(4)---C++入门-创新互联
文章URL:http://myzitong.com/article/dejicg.html