首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++入门----内联函数&&auto&&范围for&&nullptr指针

1.内联函数 顾名思义,内联函数也是函数的一种,我们在C语言的学习过程里面知道了函数和宏之间的区别和各自的优缺点; 函数的使用需要建立栈帧,宏的使用需要考虑各种符号的优先级问题,很容易出错,因为宏在使用的时候就是简单的替换...,可能不会按照我们想要的计算顺序; 内联函数就是在我们平常的函数前面加上inline关键字,这个内联函数在使用,定义的时候和函数的区别就是,内联函数会在调用的时候,会在调用函数的地方直接进行内联函数的展开...,不会建立栈帧(这个也是内联函数存在的原因,因为肯定要有自己的特定功能); 内联函数需要注意很多地方: (1)我们在定义内联函数的时候,不能把内联函数的定义和声明写在不同的文件里面(这个涉及到编译链接的相关知识...,e的改变并不会影响我们的数组里面的元素的值,如果我们想要实现这个功能使用引用就可以了,这个时候的e就是别名,相当于指针,变化就会同步到我们的数组元素上面去了: 4.nullptr 这个也是C++相对于...C语言的改进之处,我们的NULL实际上在标准库里面就是被宏定义为0: 因此我们使用函数的重载调用函数的时候,NULL会被当做int类型,而不是指针类型; 但是nullptr可以解决这个问题,因此我们在C

5110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】内联函数 ③ ( C++ 编译器 不一定允许内联函数的内联请求 | 内联函数的优缺点 | 内联函数 与 宏代码片段对比 )

    避免不必要的 开销 和 代码膨胀 ; 2、C++ 编译器 不一定允许内联函数的内联请求 由于 " 内联函数 " 会导致不必要的 开销 和 代码膨胀 , 因此 , C++ 编译器并不一定保证内联请求的成功...; 使用 inline 关键字 可以请求 C++ 编译器将函数进行内联 , 但是编译器并不一定会接受这个请求 ; 权衡利弊 : " 内联函数 "是否 成功内联 取决于 C++ 编译器 的 实现 和 优化策略...内联带来的性能提升 和 代码大小增加的开销 ; 3、是否内联决定权在编译器手中 是否内联决定权在编译器手中 : 在 C++ 语言中,inline关键字只是对编译器的建议,编译器可以根据自己的 优化策略...自由决定是否内联函数 ; 在 普通函数 声明和定义 位置 前面加上 inline 关键字 , 只是 建议 C++ 编译器将该函数内联 , 并不强制要求编译器内联函数 , 如果编译器决定不内联函数 ,...只是请求 C++ 编译器 将 该函数进行内联 , 具体 C++ 是否同意 , 需要根据 C++ 编译器的优化策略决定 , 可能同意 , 也可能不同意 ; 如果 C++ 编译器 不同意 内联请求 , 则该

    21620

    C++ 内联函数的相关概念

    C++ 内联函数的概念 介绍内联函数之前,需要说明一下 C ++ 在执行普通函数时的一个过程,在调用普通函数时,执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,...这是因为内联函数是 C++ 为了提高程序运行速度所做的一项改进,普通函数和内联函数之间的主要区别不在于编写方式,而在于 C++ 编译器如何将他们组合到程序中去,那究竟什么是内联函数呢,内联函数的编译代码与其他程序代码...上述展示了内联函数是如何运行的,那么内联函数该怎么书写呢?...如果参数为表达式,那么函数将传递表达式的值,这一点使内联函数的功能远远超过 C 语言宏定义。 内联与宏 上述所将的内联 inline 是 C++ 新增的特性。...另外,还需要注意的一点就是,应该有选择的使用内联函数,如果函数执行代码的时间比处理函数调用机制的时间长,则对于使用内联函数所节省的时间只占整个过程很小的一部分,那么就没有必要使用内联函数。

    66520

    C++心决之内联函数+auto关键字+指针空值

    7.内联函数 7.1 概念 以 inline 修饰 的函数叫做内联函数, 编译时 C++ 编译器会在 调用内联函数的地方展开 ,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。...如果在上述函数前增加 inline 关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的 调用。 查看方式: 1....是一种 以空间换时间 的做法,如果编译器将函数当成内联函数处理,在 编译阶段,会 用函数体替换函数调用 ,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运 行效率。...短小函数定义 换用内联函数 8. auto关键字(C++11) 8.1 类型别名思考 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在: 1. 类型难于拼写 2....指针空值nullptr(C++11) 10.1 C++98中的指针空值 在良好的 C/C++ 编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针

    12110

    【C++】内联函数 ④ ( C++ 编译优化 - 没有 inline 关键字修饰的函数也可能被内联 | C++ 编译器内联限制 | 内联失败的几种情况 )

    一、C++ 编译优化 - 没有 inline 关键字修饰的函数也可能被内联 1、函数内联的不确定性 现在的 C++ 编译器能够进行编译优化 , 使用了 inline 声明的 内联函数 , 编译器 可能不会允许该函数...来决定的 ; 不能保证所有函数都会被内联 ; 即使函数被内联 , 也不能保证 程序的性能 一定会提高 ; 2、C++ 编译器的内联优化 简单且频繁调用的函数 内联大概率成功 , 复杂的函数 大概率内联失败..., 内联成功可能会增加代码的大小 , 也可能会导致程序运行速度变慢 ; 可以通过设置调整 C++ 编译器 的参数 和 优化级别 , 优化编译后的程序运行效果 ; 3、内联优化细节 即使没有使用inline...关键字修饰的函数 , C++编译器 根据 函数特性 和 调用频率 , 结合当前的 程序执行效率 和 综合性能 , 决定是否将函数进行内联 ; 内联函数的目的是减少函数调用的开销 , 提高程序的执行效率...; 编译器在决定是否内联函数时 , 会考虑函数的复杂性 , 大小和调用次数等因素 ; 如果 函数比较简单 且被频繁调用 , 编译器可能会选择将其内联 , 以提高程序的执行效率 ; 二、C++ 编译器内联限制

    34330

    我的C++奇迹之旅:内联函数和auto关键推导和指针空值

    内联函数 内联函数是一种编译器优化技术,它可以将函数的代码直接插入到函数调用的地方,而不是通过函数调用的方式。这样可以减少函数调用的开销,提高程序的执行效率。...,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。...这是反汇编对比图: 查看内联函数inline方式 查看内联函数的方式确实需要根据编译模式的不同而采取不同的方法: 在 Visual Studio 2019 中,查看内联函数的步骤如下: 在 Debug...常量定义 换用const enum 短小函数定义 换用内联函数 auto关键字(C++11) 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它...这是因为在 C++ 中,0 可以隐式转换为任何指针类型,所以将 NULL 定义为 0 是合理的 #else//如果不是 C++ 编译环境,则执行这个代码块。

    17910

    C++函数指针、指针函数、返回值为函数指针的函数浅谈

    C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。...而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。 函数指针 函数指针是一种特殊的 指针,它指向函数的入口。...endl; return 0; } 指针函数 指针函数是一种返回值为指针的 函数。...0; } 返回值为函数指针的函数 其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。...先给一个例子: /* *本例是SGISTL源码中的一个函数,比普通的返回值为函数指针的函数要更复杂一点 *因为本例中函数的参数也是一个函数指针 */ void (* set_malloc_handler

    1.6K10

    【C++】函数指针 ④ ( 函数指针做函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型的本质 | 函数指针做参数意义 )

    一、函数指针做函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., int); 定义函数 接收 pFun_add 类型的形参作为参数 , 该类型是 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数中调用 函数指针 指向的 函数 ; // 传入函数指针...约定了 函数的 参与者 ; 函数返回值类型 约定了 函数的 执行结果 ; 只要 将 子任务 按照 上述 " 函数指针类型 " 的约定 , 开发出 符合要求 的 函数 , 就可以将其作为一个 子任务 传递到...其它函数中执行 ; 4、函数指针做参数意义 函数指针做参数意义 : 提高程序灵活性 : 通过使用函数指针作函数参数 , 这样可以 在 程序 运行时 动态地 设置 要调用的函数 , 提高了程序的灵活性...; 作为回调函数 : 函数指针 可以作为 回调函数 ; 先将 函数指针变量 作为 实参 传递给 其它函数 , 在 接收函数指针 的函数内部 , 满足某种条件时直接调用该函数指针 指向的 函数 , 这样实现了回调

    1.5K50

    C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字

    ,指针需要显式解引用,引用编译器自己处理 引用比指针使用起来相对更安全 C++中的内联函数 内联函数概念 以 inline修饰 的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方 展开...,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。...如果在函数前增加inline关键字将其改成内联函数,在编译期间编译器会用 函数体替换函数的 调用。...,以下给出vs2013的设置方式) 调完设置后: 内联函数的特性 1.inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用 缺陷:可能会使目标文件变大...指针空值nullptr(C++11) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。

    17410

    C++ 内联函数 inline的详细分析

    什么是内联函数?   就是使用了关键字inline的函数,如 inline int max(int a, int b) { return a > b ? a : b; } 2....内联函数有什么作用?   ...C++在调用函数时,会执行一系列的操作: 将参数push到堆栈中 将返回地址push到堆栈中 准备返回值 将所有push到堆栈的东西都pop出来   这一系列的操作无疑增加了延迟,inline函数就是把函数内容嵌入到函数调用的地方...如何使用内联函数?   内联函数跟普通函数的使用方式有所不同,内联函数的声明和定义不能分开在不同的文件,即都要在同一个文件中,因此我们在使用时,直接在头文件中定义出inline函数即可。...注意事项 如果我们的内联函数过于巨大,那编译器不会将其编译成内联函数; 内联函数中有太多循环,编译器也不会将其编译成内联函数; 递归函数不能是内联函数; 如果class的成员函数,在声明时就给出了函数的

    92620

    C++的函数对象优于函数指针地方

    转载自:http://blog.csdn.net/huang_xw/article/details/7934156         在C++编程语言中,有很多功能都与C语言相通,比如指针的应用等等。...在这里我们介绍的则是一种类似于函数指针的C++函数对象的相关介绍。C++函数对象不是函数指针。但是,在程序代码中,它的调用方式与函数指针一样,后面加个括号就可以了。...这是入门级的随笔,说的是函数对象的定义,使用,以及与函数指针,成员函数指针的关系。 C++函数对象实质上是一个实现了operator()--括号操作符--的类。...既然C++函数对象与函数指针在使用方式上没什么区别,那为什么要用函数对象呢?很简单,函数对象可以携带附加数据,而指针就不行了。...int * pb = std::find_if(array, array + SIZE, less(40));  // pb 指向 30 的位置 要想让一个函数既能接受函数指针,也能接受函数对象,

    73840

    c++指针函数的使用——回调函数

    1 /* 2 3 函数指针 4 5 函数也是有地址的 6 7 所谓函数指针,就是指向函数的指针,函数指针也是一个变量,可以指向不同的函数。...同时通过函数指针可以调用其指向函数,从而使函数的调用更加灵活。...x = pf(3, 4);//通过函数指针pf调用函数add (使用函数指针不必像使用一般指针那样解引用) 35 int x = (*pf)(3, 4);//函数指针解引用 这样做的好处可以明确指明...(int a, int b); 40 //有时候函数的参数列表和返回类型比较复杂,每次定义这样的函数指针都要重写一遍比较繁琐。...同普通指针一样,如果 44 //没有明确的初始化,则函数指针的值将是一个随机数,使用这样的指针非常危险。

    1.8K60

    【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

    的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型..., 自动匹配 重载函数 ; 一、函数指针定义方法 先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ; // 定义一个函数 int add(int a, int b)..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...= add; 4、代码示例 - 不同方式定义函数指针 在下面的代码中 , 分别使用上述章节中讲解的三种方式 , 定义了函数指针 ; 代码示例 : // 包含 C++ 头文件 #include "iostream

    18830

    【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

    的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型..., 自动匹配 重载函数 ; 一、函数指针定义方法 先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ; // 定义一个函数 int add(int a, int b)..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...= add; 4、代码示例 - 不同方式定义函数指针 在下面的代码中 , 分别使用上述章节中讲解的三种方式 , 定义了函数指针 ; 代码示例 : // 包含 C++ 头文件 #include "iostream

    19930

    C++第二弹 -- C++基础语法下(引用 内联函数 auto关键字 范围for 指针空值)

    综上所述,引用相对于指针在使用上更加方便、简洁,且没有一些指针操作的繁琐性和潜在风险,因此在效率上更高。 二. 内联函数 1....概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。...如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。...没有类型安全的检查 。 C++有哪些技术替代宏? 常量定义 换用const enum 短小函数定义 换用内联函数 三. auto关键字(C++11) 1....总结 本文详细讲解了C++语言中的引用、内联函数、auto关键字、基于范围的for循环以及指针空值nullptr等概念,并通过代码示例和图片说明,深入浅出地阐述了它们的用法和注意事项,旨在帮助读者更好地理解和应用这些

    11110
    领券