| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++Primer第五版学习(函数部分 五)特殊用途语言特性 -> 正文阅读 |
|
[C++知识库]C++Primer第五版学习(函数部分 五)特殊用途语言特性 |
特殊用途语言特性这一部分,主要是介绍三种函数相关的语言特性,分别是:默认实参、内联函数和constexpr函数。这部分内容相对简单。 1. 默认实参 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参(default argument)。调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。 比如,下面的代码:
这里需要注意的有: 我们可以为一个或多个形参定义默认值,不过需要注意的是,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。 函数调用时实参按其位置解析,默认实参负责填补函数调用缺少的尾部实参(靠右侧位置)。例如,要想覆盖backgrnd的默认值,必须为ht和wid提供实参: 以下的调用方式就是错误的:
因此,当我们设计含有默认实参的函数时,其中一项任务是合理设置形参的顺序,尽量让不怎么使用默认值的形参出现在前面,而让那些经常使用默认值的形参出现在后面。 有一点需要注意,在给定的作用域中一个形参只能被赋予一次默认实参。换句话说,,函数的后续声明只能为之前那些没有默认值的形参添加默认实参,而且该形参右侧的所有形参必须都有默认值。假如给定
我们不能修改一个已经存在的默认值:
但是可以按照如下形式添加默认实参:
默认实参初始值局部变量不能作为默认实参。除此之外,只要表达式的类型能转换成形参所需的类型,该表达式就能作为默认实参: 2.内联函数****和constexpr函数 规模较小的操作定义成函数有很多好处,主要包括:
例如,如下代码:
内联函数可避免函数调用的开销将函数指定为内联函数(inline),通常就是将它在每个调用点上“内联地”展开。假设我们把shorterString函数定义成内联函数,则如下调用:
将在编译过程中展开成类似于下面的形式
从而消除了shorterString函数的运行时开销。 在shorterString函数的返回类型前面加上关键字inline,这样就可以将它声明成内联函数了:
一般来说,内联机制用于优化规模较小、流程直接、频繁调用的函数。 constexpr 函数 constexpr函数(constexpr function)是指能用于常量表达式的函数。 定义constexpr函数的方法与其他函数类似,不过要遵循几项约定: 函数的返回类型及所有形参的类型都得是字面值类型,而且函数体中必须有且只有一条return语句:
把new_sz定义成无参数的constexpr函数。因为编译器能在程序编译时验证new_Sz函数返回的是常量表达式,所以可以用new sz函数初始化constexpr类型的变量foo。执行该初始化任务时,,编译器把对constexpr函数的调用替换成其结果值。为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:02:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |