C++中的内联函数(inline)

news/2024/5/20 2:19:42 标签: 内联函数, inline, 宏定义

内联函数">在C++程序中符合下列条件的函数为内联函数

inline关键字的函数">1. 函数说明前冠以“inline”关键字的函数

2. 类内定义的函数成员

内联函数可以提高程序运行效率">将函数体短小而又频繁调用的函数说明为内联函数可以提高程序运行效率。

宏定义方式define也可以实现类似于内联函数inline的功能不过内联函数的方式更为方便和可靠">利用编译预处理的宏定义方式(#define)也可以实现类似于内联函数inline)的功能。不过,内联函数的方式更为方便和可靠。

// 例如
inline int MAX(int a, int b) { if(a > b) return a; return b;}
// 等价于
#define MAX(a, b) { (a > b) ? a : b}

宏定义的功能与对应的内联函数基本一致但仍然是有差别的宏定义中的参数和计算结果没有类型说明编译时不可能进行类型检查是不安全的更无法区分赋值参数和引用参数很容易出错">虽然带参数的宏定义的功能与对应的内联函数基本一致,但仍然是有差别的:宏定义中的参数和计算结果没有类型说明,编译时不可能进行类型检查,是不安全的,更无法区分赋值参数和引用参数,很容易出错。

内联函数少用宏定义实现">因此,C++语言的编程中,当某段程序短小而又经常被重复时,建议采用内联函数,少用宏定义实现。

宏定义容易出错的例子">举一个宏定义容易出错的例子:

#define f1(x) x*x
#define f2(x) (x)*(x)
#define f3(x) ((x)*(x))

int a=3, b=4, c=16;

cout<<f1(a+1); //因为a+1*a+1=3+1*3+1=7,所以结果是7
cout<<f2(a+1); //因为(a+1)*(a+1)=(3+1)*(3+1)=16,所以结果是16

cout<<c/f2(b); //因为16/(4)*(4)=16,所以结果是16
cout<<c/f3(b); //因为16/((4)*(4))=1,所以结果是1

http://www.niftyadmin.cn/n/1186804.html

相关文章

C# String的内容不能被改变

一旦视图改变string的内容&#xff0c;就会产生一个新的实例。上图代码中&#xff0c;对str进来了ToUpper操作和Insert操作之后&#xff0c;输出str的值&#xff0c;还是“hello”。

main函数(主函数)的参数

一般的主函数是无参的&#xff0c;但也可以有参数表&#xff0c;不过其参数表有特殊要求。 主函数以返回值和参数的方法提供了程序和它的运行环境之间交换信息的手段。 当main()取int类型返回值时&#xff0c;允许程序在退出之前给系统返回一个整数信息。 当main()取有参形式时…

Wannafly挑战赛9

一、找一找时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述给定n个正整数&#xff0c;请找出其中有多少个数x满足&#xff1a;在这n个数中存在数ykx&#xff0c;其中k为大于1的…

网易2017秋招 回文序列

如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如&#xff1a;{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列&#xff0c;允许使用一种转换操作&#xff1a;选…

c++读取和写入TXT文件的整理

c读取和写入TXT文件的整理 #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文件 #include <fstream> #include <iomanip> using namespace std;int main() {//ifstream从文件流向内存的ifstream表示文件输入流…

外部存储属性extern

在所有的函数、类和名字空间之外说明的变量的作用域从被说明点开始&#xff0c;到所在的程序文件结束为止&#xff08;注意&#xff0c;其生存期则是直到程序结束&#xff09;。在另一个程序文件中如果需使用同一个变量的话&#xff0c;必须把这个变量说明为外部的&#xff08;…

分门别类刷leetcode——二叉树和图(C++实现)

目录 二叉树的各种基础知识 Leetcode 113 路径总和 II Leetcode 236 二叉树的最近公共祖先 leetcode 114 二叉树展开为链表 LeetCode 199 复习层序遍历 leetcode 103二叉树的锯齿形层次遍历 复习图 邻接矩阵——常常用于表示稠密图 邻接表——常用于表示稀疏图——…

静态存储属性static

1. 对于全局变量 作用&#xff1a;将作用域锁定在本程序文件&#xff0c;不可通过extern扩展 int xixi; 生存期&#xff1a;整个程序运行过程 作用域&#xff1a;本程序文件&#xff0c;但可通过外部属性说明&#xff08;extern&#xff09;将其作用域扩展到整个程序 stat…