初识C++(4)---C++入门-创新互联
- 内联函数
- 概念
- 特性
- auto关键字
- auto使用的一些规则
- 基于范围的for循环
- 范围for的语法
- 范围for的使用条件
- 指针空值nullptr
内联函数 概念
以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++入门-创新互联
当前地址:http://azwzsj.com/article/dejicg.html