内联函数\nullptr【C++初阶】

news/2024/11/30 2:26:19/

本文主要讲解内联函数相关知识点,随便讲讲指针空值nullptr

目录

前言 

一、概念

二、特性 

二、指针空值nullptr(与前文关系不大)


前言 

在学习内联函数前,我们先回顾一下宏。

将下面的函数改为宏函数应该怎么改呢?

int Add(int a, int b)
{return (a + b) * 10;
}

 答案是:

#define Add(x,y) (((x)+(y))*10)

可见,宏函数有其优势,如不用调用栈帧,提高调用效率等,

但也有许多缺点,如可读性差,不可调试、没有类型安全的检查等。

因此,C++中增加了内联函数,可以很好地解决宏的大部分缺点,接下来我们就来学习一下内联函数的相关知识。

 

一、概念

inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

inline int Add(int a, int b)
{return (a + b) * 10;
}

二、特性 

1、inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用。

        缺陷:可能会使目标文件变大。

        优势:少了调用开销,提高程序运行效率。

2、inline对于编译器而言只是一个建议,不同编译器关于inline的实现机制可能不同,一般建议将函数规模较小、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。

二、指针空值nullptr(与前文关系不大)

NULL实际上是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看到,NULL可能被定义为字面常量0,也可能被定义为无类型指针(void*)的常量。这就可能导致在使用时会遇到一些麻烦,如:
void f(int)
{cout << "f(int)" << endl;
}
void f(int*)
{cout << "f(int*)" << endl;
}
int main()
{f(0);f(NULL);//实际调用的是f(int)f((int*)NULL);return 0;
}

在C++98中,字面常量既可以是一个整型数字,也可以是无类型的指针(void*)常量,但编译器通常将其看做整型常量,要想将其按指针的方式来使用,必须强转(void*)0

在C++11中引入了一个新的关键字nullptr,它表示指针空值

sizeof(nullptr)sizeof((void*)0)所占字节数相同。

因此,为了提高代码的健壮性,在后续表示空值指针时,推荐使用nullptr。


http://www.ppmy.cn/news/55207.html

相关文章

Java多线程基础-7:wait() 和 notify() 用法解析

线程之间是抢占式执行的&#xff0c;线程调度是无序的、随机的&#xff0c;因此线程之间执行的先后顺序是难以预知的。但是&#xff0c;实际开发中&#xff0c;有时我们希望合理地协调多个线程间执行的先后顺序。 虽然 join() 算是一种控制顺序的方式&#xff0c;但它毕竟“功…

九款顶级AI工具推荐

ChatGPT OpenAI开发的最强对话系统 地址&#xff1a;chat.openai.com ChatGPT能够在同一个会话期间内回答上下文相关的后续问题。其在短时间内引爆全球的原因在于&#xff0c;在网友们晒出的截图中&#xff0c;ChatGPT不仅能流畅地与用户对话&#xff0c;甚至能写诗、撰文、编…

LeetCode笔记:Weekly Contest 342

LeetCode笔记&#xff1a;Weekly Contest 342 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-342 1. 题目一 …

Pony ORM使用完整教程【附截图】

Pony ORM是一个Python的ORM框架&#xff0c;使用简单&#xff0c;支持多种数据库&#xff0c;如SQLite&#xff0c;MySQL和PostgreSQL等&#xff0c;可以通过Python代码与数据库交互。 下面是使用Pony ORM的完整教程&#xff1a; 安装 使用以下命令安装Pony ORM&#xff1a;…

【设计模式】七大设计原则--------单一职责原则

文章目录 1.案例1.1 原始案例1.2 改进一&#xff1a;类上遵循单一职责原则1.3 改进二&#xff1a;方法上遵循单一职责原则 2.小结 1.案例 1.1 原始案例 package com.sdnu.principle.singleresponsibility; //客户端 public class singleResponsibility {public static void m…

LeetCode——链表简单题题解

83. 删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 解题思路&#xff1a;用一个指向节点类型的指针保…

带你搞懂人工智能、机器学习和深度学习!

不少高校的小伙伴找我聊入门人工智能该怎么起步&#xff0c;如何快速入门&#xff0c;多长时间能成长为中高级工程师&#xff08;聊下来感觉大多数学生党就是焦虑&#xff0c;毕业即失业&#xff0c;尤其现在就业环境这么差&#xff09;&#xff0c;但聊到最后&#xff0c;很多…

学系统集成项目管理工程师(中项)系列13a_人力资源管理(上)

1. 基本情况 1.1. 项目团队成员的特征 1.1.1. 高学历、高素质、流动性强、年轻、个性独立 1.2. IT行业的显著特征 1.2.1. 工作强度大 1.3. 绩效评定、招聘、留用、劳工关系、健康与安全规定及其他与管理人力资源有关的技能 1.4. 项目团队成员是项目的人力资源 1.5. 项目…