C++:内联函数inline、constexpr函数、函数指针等介绍

1、内联函数和constexpr

(1)What(什么是内联函数)

被关键字inline修饰的函数,取代了C语言中的宏函数,内联函数在编译时,会将函数体的代码直接嵌入到调用它的地方,从而避免了函数调用的开销

inline void show(const string &strSentence);

(2)Why(内联函数的作用)

避免函数调用时引起的开销:保存现场环境、地址反复跳转等开销

(3)constexpr函数

A.What(什么是constexpr函数)

在编译期间就能得到值,需要保证其函数体中只包含不依赖于运行时状态的代码,具体来说,只能使用常量值、枚举、非递归的结构体、指向函数或对象的指针等,不允 许使用运行时变量、分支语句和循环语句等

B.Why(constexpr函数的作用)

  • 优化性能:constexpr 函数在编译时就能计算出结果,避免了运行时的计算开销
  • 增强代码的可读性和可维护性:明确标识出某些函数的结果在编译时就可以确定,使代码更易于理解其意图

C.How(如何使用constexpr函数)

constexpr int factorial(int n)
{
   
	return (n<=1
C++11标准中,constexpr是一个关键字,它用于指定函数或变量可以在编译时被求值,而不必等到运行时再求值。constexpr函数是指在编译时就能计算结果的函数,这些函数可以用于常量表达式,也可以用于一般的函数调用。 constexpr函数可以让程序具有更好的性能和可读性,因为它们可以在编译时进行优化,从而避免了运行时的计算开销。此外,constexpr函数还可以帮助编译器检查代码的正确性,在编译时就能发现一些错误。 constexpr函数有以下特点: 1. 函数必须是纯函数,即函数的返回值只能由输入参数决定,不能依赖于任何状态或副作用。 2. 函数的参数和返回值必须是字面类型(如整数、浮点数、指针等)。 3. 函数体必须是一条或多条简单语句,不能包含循环、分支、动态内存分配等运行时语义的操作。 4. 函数必须在定义时就能被求值,即不能依赖于运行时输入。 例如,下面是一个constexpr函数的例子: ```c++ constexpr int add(int x, int y) { return x + y; } int main() { constexpr int z = add(1, 2); // 编译时求值 int a = add(3, 4); // 运行时求值 return 0; } ``` 在这个例子中,add函数是一个constexpr函数,它可以在编译时被求值。因此,当我们使用常量表达式调用add函数时,编译器会在编译时计算出结果,并将其作为常量使用。而当我们使用普通的变量调用add函数时,编译器会将其作为一般的函数调用,在运行时进行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值