Hello,大家好!我是木荣。温故而知新,可以为师矣。作为一名攻城狮,扎实的基本功是解决问题及完成工作中任务的重要前提。没有良好的基本功作为铺垫,一味的追求知识的宽度是毫无意义,知其然更要知其所以然。因此,在平时和小伙伴们聊天时,在谈到学习技术方面的问题,我会告诉他们注重基本功。所以,最近文章会总结一些日常编程工作中常用的重要基本知识点,根据平时工作中常用的也是重要的知识点逐步展开。
C++ 的知识点千变万化,这里将根据https://github.com/huihut/interview 这个仓库中对C++常见的知识点进行再总结。欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。
内联函数,都知道是什么嘛,就不多解释了,用这个开头,因为它够简单,又有足够的争议性。 有的人喜欢用内联函数,有的人不喜欢用,我嘛,无所谓,什么时候想起来就什么时候用,或者在代码审计的时候会去调整一部分函数为内联函数。
内联函数用内联代码替换函数调用,会占用大量内存,是以空间换时间。内联函数最主要的功能就是提高程序的运行速度,内联函数主要是编译代码与其他程序代码内联起来。 所以我们要综合去考虑,有选择的使用内联函数。
其实小伙伴在写代码的时候,关键字还是用的比较多的,老九主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图。 C语言关键字总结 static关键字C语言 const关键字C语言 register关键字用法 auto关键字 inline内联函数 static关键字 static可以用来修饰局部变量、全局变量、函数 1、局部变量: 生命周期:原先存在栈中,生命周期语句执行完毕便结束了。现在存放到静态数据区,生命周期持续到整个程序执行结束。 作用域:并没有改变作用域,还是
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。
含有可变形参的函数:fun(parm_list, ...)与省略符对应的实参暂停类型检查。 返回值为viod的函数只能使用return;不能return expression。return;也只能用于返回值为void的函数。 静态变量只在初次调用时初始化,static size_t ctr=0只执行一次。 内联函数避免函数调用的开销:编译时展开为函数体中的表达式,免去函数调用的寄存器保存恢复、复制实参跳转等。 内联函数定义在头文件。编译器将类内定义的成员函数当做内联函数。 每个成员函数都有一个隐含的this
我们先看一下内联函数。内联函数也是C++中的一个重要特性。所谓内联函数,其实本质上也是一种函数,在形式上的表现就是在普通函数前面加上关键字"inline",然后相对于普通函数来说,它也比较短小。C++中"inline"的作用其实是为了优化代码的运行,降低代码的执行时间,就像在C语言中的宏函数一样,作用也是为了降低代码的执行时间。
(为了方便记忆可以想成)被 const 修饰(在 const 后面)的值不可改变,如下文使用例子中的 p2、p3。
在C语言中,我们通常会把完成特定功能的代码封装为一个函数,这样的函数可能完成者复杂的功能从而具有较多的代码长度,同时也有着许许多多的只完成简单功能的函数,这些函数内部通常只有几行代码。 比如: 完成交换功能的函数
在C语言中,为了解决类似的问题,我们学习了使用类函数宏来替换这些大量重复使用但又并不复杂的函数,如,将求两数中的最大值的函数改写为类函数宏:
4. 以下关于纯虚函数的说法,正确的是( ) A:声明纯虚函数的类不能实例化对象 B:声明纯虚函数的类是虚基类 C:子类必须实现基类的纯虚函数 D:纯虚函数必须是空函数
其实小伙伴在写代码的时候,关键字还是用的比较多的,老九主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图。
在c++中,预定义宏的概念是用内联函数来实现的,而内联函数本身也是一个真正的函数。 内联函数具有普通函数的所有行为。唯一不同之处在于内联函数会在适当的地方像预定义宏 一样展开,所以不需要函数调用的开销。因此应该不使用宏,使用内联函数。 在普通函数(非成员函数)函数前面加上inline关键字使之成为内联函数。但是必须注意必须 函数体和声明结合在一起,否则编译器将它作为普通函数来对待。
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
引用是一个重要的概念,它提供了一种方式,通过它可以让两个不同的标识符(变量名、参数名等)引用同一个数据对象
1.const与#define相比有什么不同? const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符匹配,没有类型安全检查,并且在字符替换中可能会产生意想不到的错误(边际效应)。 有些集成测化的测试工具可以对const常量进行调试,但是不能对宏常量进行调试。 在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。 在C++程序中,类里面的数据成员加上mutable后,修饰为const的成员变量,就可以修改它了。 2.sizeof与s
一个函数是由 返回类型 函数名称 0个或多个形参以及函数体构成。 函数调用时 使用函数名称加小括号,小括号里面是实参。 函数调用时,完成部分的工作:
函数的定义由返回类型、函数名、形參表(可能为空)以及函数体组成。函数体是调用函数时运行的语句块。
在C语言中,我们为了减少栈帧的开销,我们可以通过宏函数,没有栈帧消耗,在预处理的阶段就被替换了,就没有栈帧的消耗了
用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。
实际上这样会扩大权限:本身用const修饰后,不能改变a的值了,但是如果引用后就能利用引用改变。这样扩大了权限
内联函数是一种编译器优化技术,它可以将函数的代码直接插入到函数调用的地方,而不是通过函数调用的方式。这样可以减少函数调用的开销,提高程序的执行效率。
6.1 malloc()与free ()是C语言的标准库函数,new/delete是C++的运算符,所以new/delete不 需要头文件进行声明; 6.2 new/delete可以调用构造函数和析构函数;
C++ 是 C语言 的超集,是一门在 C语言 基础上发展起来的语言,C++ 很强大,如今 C++ 已是一个多重范型编程语言,主要包含四部分:C、Object-Oriented C++、Template C++和STL,因此我们一般将 C++ 看作一个语言联邦,显然 C++ 的内容很丰富,也比较难学,但当我们掌握后,它将称为一把利刃
这篇文章介绍C语言的内联函数、递归函数、函数指针、指针函数、局部地址、const关键字、extern关键字等知识点;这些知识点在实际项目开发中非常常用,非常重要。
1. C++关键字 2. 命名空间 变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。 2.1 命名空间定义 使用namespace关键字,后面跟命名空间的名字,然后用{}将成员括起来即可,和C语言的结构体类似 存在多个相同的命名空间的时候,编译器编译的时候会把他们合并,如下面 命名空间可以嵌套 PS:命名空间定义
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。 比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。
C++是C的超集,也就是说,C++包括了C的所有基础特性,并且还增加了一些新的特性。下面列举一些C和C++之间的主要区别:
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
距离上次更新又过了一周,又该更新新的读书笔记了。本次更新的主要是c++中函数部分的内容
我们在C语言阶段就学习了关键字#define 用来定义宏(宏函数、宏常量),然后在预处理阶段会实现宏的替换,这样的话不仅大大的提高了代码的复用性(不会把代码写死,更改起来方便),而且还提高了整体的性能。但是,宏替换也存在着一些缺点:
本文开始我们总结关于C++面向对象的相关概念,本文主要介绍C++中用来实现封装功能的类。
今天我们正式开始C++语言的学习,和C语言一样,我们与C++的第一缕羁绊从打印 “hello world” 开始:
原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html
以 inline 修饰 的函数叫做内联函数, 编译时 C++ 编译器会在 调用内联函数的地方展开 ,没有函数调
&在c++中的一种作用为取出当前变量在内存的逻辑地址 *在c++中的一种作用为取出当前逻辑地址对应的内存空间的值 c++中提供指针变量存储对象的地址,指针的运算会被编译器优化为地址的运算,比如一个int类型的指针 p+1的值实际是p指向的地址+1个int所占空间大小后的逻辑地址 指针语法为 typename * variable,比如
虚表即虚函数表,存储的是虚函数的地址。另外:虚表是在编译阶段就生成的,一般存在于常量区(代码段)。
首先我们先要知道,C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库。本章将会带大家了解,C++是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。
结构体:将不同类型的数据组合成一个整体,是自定义类型; 共同体:不同类型的几个变量共同占用一段内存
1,应用 ifndef/define/endif结构产生预处理块的目的是:防止头文件被重复引用。
返回类型是必须的,当没有返回类型的时候就用void代替,如果参数个数超过1,则用逗号分隔参数列表,参数列表可以为空。
在前面的 【C++】C++入门(一)和【C++】C++入门(二)中已经分享了关于C++的一些基础知识,这次分享的是与引用有关的一些笔记。
内联函数是C语言从C++中借鉴过来的,适当的使用内联函数可以提高程序的执行效率。本篇文章就来讲解下内联函数,赶紧来看下吧!
a. 之前的C语言学习中我们就了解过全局和局部这部分的知识了,在C++里面他们有一个新的名词就是域,域就相当于一片领地,如果想定义两个一模一样的变量在同一个域中,这显然是不行的,会出现变量重命名的问题,但是这样的问题还是比较常见的,因为c++和C语言中都有很多的模板,函数库等等,难免我们定义的和库里面定义的,产生命名冲突和名字污染,namespace所创建的命名空间就是用来解决这样的问题的。
内存泄漏,是由于疏忽或错误造成程序未能释放掉不再使用的内存。内存泄漏,并不是指内存内存在物理地址上的消失,而是应用程序分配某段内存后,失去了对该段内存的控制,因而造成内存的浪费。
领取专属 10元无门槛券
手把手带您无忧上云