const引用和函数占位参数遇上默认参数以及内联函数
1.const引用:
但是加上const之后是可以的,const int &a=100;就不会报错了。
2.函数占位参数:
如果给最后的占位参数加上默认值:
3.内联函数
内联只是对编译器发起一个申请,编译器可以拒绝用户的请求。内联函数只用在普通函数的开头加上inline关键字。
当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。节省时间但是消耗空间。
inline函数的规则
(1)含有递归调用的函数不能设置为inline;
(2)使用了复杂流程控制语句:循环语句和switch语句,无法设置为inline;
(3)由于inline增加体积的特性,所以建议inline函数内的代码应很短小。最好不超过5行。
(4)inline仅做为一种“请求”,特定的情况下,编译器将不理会inline关键字,而强制让函数成为普通函数。出现这种情况,编译器会给出警告消息。
(5)在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,如果在前面声明为普通函数,而在调用代码后面才定义为一个inline函数,程序可以通过编译,但该函数没有实现inline。比如下面代码片段:
//函数一开始没有被声明为inline:
void foo();
//然后就有代码调用它:
foo();
//在调用后才有定义函数为inline:
inline void foo()
{
......
}
代码是的foo()函数最终没有实现inline;
如果一开始foo函数被声明成了inline,但是定义的时候没有inline关键字,同样不能内联。
C++ inline函数是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。一般地,用户可以阅读函数的声明,但是看不到函数的定义。尽管在大多数教科书中内联函数的声明、定义体前面都加了 inline 关键字,但我认为 inline 不应该出现在函数的声明中。这个细节虽然不会影响函数的功能,但是体现了高质量C++/C 程序设计风格的一个基本原则:声明与定义不可混为一谈,用户没有必要、也不应该知道函数是否需要内联。STM32中也是这样的,程序设计风格应该是只用定义即可,可放在头文件中。
(6)为了调试方便,在程序处于调试(release版本可以)阶段时,所有内联函数都不被实现。
(7)定义在类声明之中的成员函数将自动地成为内联函数
内联函数,和其他函数还有不同在于,内联函数可以定义在头文件中。
constexpr函数:函数的返回值和参数类型必须是字面值类型(如int ,指针,引用等,类 类型不属于字面值类型),而且函数体中只有一条return语句。
除了内联函数之外,c++还有constexpr函数,这个感觉是语法糖,一般我们使用不到,constexpr函数和内联函数一样,定义在头文件中也可以。
对于给定的内联函数或者constxepr函数,它的多个定义必须完全一致(c3p书上这样的说,内联函数和constxepr函数可以被多次定义,不是很理解),基于这个原因,他们通常被定义在头文件中。头文件依旧需要使用#ifndef保护,定义两个一模一样的内联函数也是会报错的。测试了,定义相同的内联函数会报错,也打开了gcc、g++的内联选项。不过,内联函数一般而言我们也用不到,只是不明白这里为什么和书上说的不一致。
猜测书上说的多次定义,实际上并不是我们理解的可以多次定义(多次定义必然报错),放在头文件中,还是应该加上头文件保护,并加上static关键字,这样保证不出错。
当然,使用#pragma once的头文件保护措施更好。
- 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数
- 内联函数,引用变量,按引用传递参数,默认参数,函数重载,函数模板,函数模板具体化,decltype
- 常引用,const引用的案例,以及常引用作函数参数
- 【转载】用const修饰函数 以及引起的附加限制:const函数不能调用非const的函数或引用非const参数
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- c++——引用、const关键字、动态分配内存、内联函数、函数重载、参数缺省值
- C++学习笔记(四)--内联函数,引用参数,默认参数,函数重载,函数模板
- 内联函数、默认参数和函数占位参数
- C++入门学习:内联函数、函数的默认参数和占位参数
- 作为函数参数的临时变量的引用必须是const的
- C++之函数参数的值传递、指针传递以及引用传递的区别和联系
- 【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数
- python 函数编程的位置参数、默认参数、关键字参数以及函数的递归
- 总结1->sizeof-默认值参数的函数-static-指针和引用概念-const-CAS
- const引用做形参---函数参数的传递,并不都是复制
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- C++ const类型引用做函数参数
- react 外部函数的引用以及onClick传递参数
- const可以出现在函数头,参数列表,以及参数尾