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

【c++入门】引用详解 | auto的类型推导 | 范围for循环 | nullptr空指针

第二次函数调用Add,虽然ret没有接受,但是因为在第一次函数调用后,ret就已经是c的别名了,是指向c的引用,由于函数栈帧空间的复用性,第二次Add的调用还是在上一次的空间,此时c更改了值,那么ret...但是,需要注意的是,如果函数内部不需要修改参数的值,传引用可能会导致意外的修改,因此需要谨慎使用。 ☁️值和引用作为返回值类型的性能比较 函数可以返回值或引用作为返回类型。...但是,返回值会导致结果的副本被创建,如果结果较大,返回值的效率可能会比较低。 返回引用的优点是效率高,因为不需要创建结果的副本。同时,返回引用可以直接修改原始数据,对原始数据产生影响。...☁️auto不能推导的场景 ⭐函数参数 由于函数参数的类型是在函数调用时确定的,编译器无法在编译时推导出参数的类型。...不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。

25110

面试总结-C++

} 宏函数属于在结构中插入代码,没有返回值;函数调用具有返回值。...指针可以先声明,但是引用声明的时候就必须初始化,不存在空的引用很容易理解。 指针变量可以改变所指的对象。但是引用一旦声明了就不能再改变引用的对象了。...原理也很清晰,构造函数,由于构造顺序是从基类到派生类,所以调用虚函数,可能派生类还没有构造出来,没有意义。...函数形参是类的对象时,调用函数将函数的形参和实参结合的时候。 函数返回值是类的对象,函数调用完成返回时。...由于unwind机制的保证,当异常发生时,函数栈内已构造的局部对象的析构函数会被一一调用,在析构函数内释放资源,也就杜绝了内存泄漏的问题。 2.做好程序设计。

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

    面试必备(背)--Go语言八股文系列!

    1.3 STW(Stop The World) 为了避免在 GC 的过程中,对象之间的引用关系发生新的变更,使得GC的结果发生错误(如GC过程中新增了一个引用,但是由于未扫描到该引用导致将被引用的对象清除了...:可以获取设置的截止时间,返回值 deadline 是截止时间,到了这个时间,Context 会自动发起取消请求,返回值 ok 表示是否设置了截止时间。...「Err」 方法:返回Context 被取消的原因。 「Value」 方法:获取 Context 上绑定的值,是一个键值对,通过 key 来获取对应的值。 5....参数传递中,值、引用及指针之间的区别! 方法的接收者: 值类型,既可以调用值接收者的方法,也可以调用指针接收者的方法; 指针类型,既可以调用指针接收者的方法,也可以调用值接收者的方法。...通常我们使用指针作为方法的接收者的理由: 使用指针方法能够修改接收者指向的值。 可以避免在每次调用方法时复制该值,在值的类型为大型结构体时,这样做会更加高效。 21.

    5.8K32

    【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值

    引用做参数与返回值效率 说明:由于一般在实参传递或返回值传递过程需要创建临时对象,而对于引用与被引用对象共用同块空间,减少了拷贝,提高效率。...1.7 引用和指针的区别 在语法概念上,引用是一个别名,没有独立空间,同其引用实体共用同一块空间,但是在底层实现上,实际引用是有开辟空间的,由于引用是按照指针方式实现的。...虽然避免了函数调用开销提高程序运行效率,但是可能会使目标文件变大 【给出场景】:当1000行需要调用swap函数,函数体假设10行代码 如果swap不是内敛函数,合计需要10 + 1000 如果swap...; } 迭代的对象需要要实现++和==的操作(本质还是迭代器) 四、指针空值 在C/C+良好的编程习惯中,对于未初始化的指针,一个没有合法的指向的指针,基本会进行初始化。...(void*)的常量),C++中使用NULL指针空值,可能会遇到一些问题。

    11910

    【c++入门】引用,内联函数,auto

    通过引用参数,可以直接修改传入的变量,而无需担心指针解引用和地址操作,这使得代码更加安全、清晰 但是由于引用定义后不能改变指向,引用不能替代指针 当然,这里swap函数取名字也可以取x,y,因为他们在不同作用域...,因为一旦 func 函数返回,a 的生命周期结束,其所占用的内存可能会被其他数据覆盖,或者其所在的栈帧空间可能被后续的函数调用复用。...这种方法适用于那些函数体较小、调用频繁的函数 比如,我要调用一万次Add函数: int Add(int x,int y) { return x+y; } 如果我要调用一万次,意味着要建立一万个栈帧...,由于Add函数被声明为内联,编译器可能会将main函数中的Add(5, 3)调用直接替换为5 + 3,从而避免了函数调用的开销 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,...0 可能引起的一些类型混淆或过载解析问题,nullptr 可用于任何需要空指针的地方,与所有指针类型兼容,包括 C++ 基本类型指针、对象指针、函数指针以及成员函数指针 由于 nullptr 有自己的类型

    12410

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

    ,发现传值和指针在作为传参以及返回值类型上效率相差很大 引用和指针的区别 在语法概念上 引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...,指针需要显式解引用,引用编译器自己处理 引用比指针使用起来相对更安全 C++中的内联函数 内联函数概念 以 inline修饰 的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方 展开...,以下给出vs2013的设置方式) 调完设置后: 内联函数的特性 1.inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用 缺陷:可能会使目标文件变大...指针空值nullptr(C++11) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖

    17410

    【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

    通过上述运行结果的比较,不难发现传值和指针在作为传参以及返回值类型上效率相差很大。...2.2 -> 特性 inline是一种空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序的运行效率; inline...迭代的对象要实现++和==的操作 5 -> 指针空值nullptr(C++11) 5.1 -> C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误...p(NULL)调用指针版本的p(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。...为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。 感谢大佬们支持!!!三连必回

    15310

    业界成熟的代码规范,你会用了吗?

    由于这些规范已经为我们定义了基本框架,我们只需进行少量工作即可实现自己的规范。综上所述,我们的策略应该是选择成熟的方案,并根据需要进行扩展。...可以在 Sonar 中设置质量阈值,如果问题数超过阈值,会导致当前构建失败。Sonar 误判在使用 Sonar 扫描时,可能会遇到 Sonar 误判的情况。...它先调用 Apache Common 类库的 StringUtils.isNotBlank 方法,确保手机号不为空,不为 Null,然后再处理手机号。...理论上这段代码是不会出现 NPE 的,因为 StringUtils.isNotBlank 已经保证了手机号不为空。...因此,在实施过程中需要把控检查规则的宽松度,并结合公司和团队的实际情况,制定一个合适的方案。例如,可以先培养习惯,再逐渐提升要求,项目赶进度时,适当放宽甚至临时取消代码规范检查。

    18410

    【C++】入门基础介绍(下)输入输出,函数重载,缺省与引用

    10. 3 引用的使用 引用在实践中主要是用于引用传参和引用做返回值,减少拷贝,提高效率,并且改变引用对象时同时改变被引用对象。 引用传参跟指针传参功能是类似的,引用传参相对更方便一些。...引用返回值的场景相对比较复杂,这里简单介绍一下场景,还有一些内容在后续类和对象的博客中会继续深入探讨。 使用引用返回值时要注意,引用的本质是简化了的指针,返回的值不能是局部变量,不然会导致野引用。...使用sizeof时的含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte) 指针很容易出现空指针和野指针的问题,引用(相对)很少出现,...不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,本想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,调用了f(intx),因此与程序的初衷相悖。...使用nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型。

    13010

    CVE-2019-0808 从空指针解引用到权限提升

    其次空指针解引用的漏洞如何利用?这些可以通过查阅相关资料来自行探索。 从poc到寻找漏洞成因 在我分析这个漏洞的时候已经有人公布了完整的利用链,包括该漏洞的 poc 、 exp 和浏览器利用的组合拳。...然后在函数MNGetpItem中导致了空指针解引用得问题。 ?...从空指针解引用到任意代码执行 触发了漏洞之后我们如何利用是个问题,首先的问题是把空指针解引用异常解决掉,在 windows7 版本上可以使用 ntdll!...的返回值又是用户态可控,利用这一点我们可以实现任意地址或0x40000000u的操作。...那我们通过这个漏洞的复现及利用过程,还要思考这个漏洞是如何被发现的,是否可以通过poc中的一些功能来 fuzz 到同样的空指针解引用,以及我们如何去寻找这类漏洞。

    99320

    Objects.equals有坑

    空指针异常 从前面我们已经知道,判断两个对象是否相等,可以使用==号,或者equals方法。 但如果你更深入的使用它们,会发现一个问题,即:这两种方式判断值相等,都可能会报空指针异常。...但由于c在自动拆箱的过程中,需要给它赋值int的默认值0。而给空对象,赋值0,必然会报空指针异常。...由于字符串对象e是空对象,直接调用它的equals方法时,就会报空指针异常。...如果引用不相等,则判断a是否为空,如果a为空则返回false。 如果a不为空,调用对象的equals方法进一步判断值是否相等。 该方法是如何使用的?...但这个有个疑问:前面使用a==b这种方式比较引用是否相等,当时b为空时,程序直接抛了空指针异常。 而Objects.equals方法内部也使用了a==b比较引用是否相等,为啥它没有抛异常?

    41310

    C++ 构造函数和析构函数

    ,因此所有C++中的形参传递方式,函数特性以及函数调用方法都能用于构造函数。...,接着上面的例子,如果重载一个空的构造函数,那么两个调用格式都正确: class circle{ public: int m_L; public: //成员函数(方法) circle(){}...虽然引用是指针的一种特殊情况,但是指针太过于灵活,并且引用在形式上引用与普通的变量地用法并没有什么区别,因此使用起来更加方便。...3、this指针 接着上一小节的问题,this指针为上述问题提供了一个完美的解决方案,它指向用来调用成员函数的对象(被当作参数隐式地传递给成员函数),我们通过一张图来理解它: 此外,this指针的另一个用途是当成员函数需要返回对象时...**由于函数通过值传递的方式返回 person 类型,所以将整个 person 类型复制了一份返回,返回值继续调用 addPerson(p1), **最后的结果赋值给了新的对象 p3。

    97100

    【C++修行之道】引用、内联函数、auto关键字、for循环(C++)、nullptr(C++11)

    引用比指针使用起来相对更安全 (注:Java只有引用,存储的是下一个节点的别名,Java的引用可以改变指向) 二、内联函数 2.1 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开...vs2013的设置方式) 2.2 特性 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率...,否则可能会出现 不可预料的错误,比如未初始化的指针。...// 如果它被定义为 0,编译器可能会将其视为整数, // 从而选择 f(int) 函数,尽管我们的意图可能是调用指针版本的函数。...return 0; } 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖。

    6100

    C++11中lambda表达式与包装器

    1. lambda表达式 在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。...使用该修饰符时,参数列表不可省略(即使参数为空)。 ->returntype:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。...注意: 在lambda函数定义中,参数列表和返回值类型都是可选部分,而捕捉列表和函数体可以为空。因此C++11中最简单的lambda函数为:[]{}; 该lambda函数不能做任何事情。...函数指针?函数对象(仿函数对象)?也有可能 //是lambda表达式?所以这些都是可调用的类型, 如此丰富的类型,可能会导致模板的效率低下, //why?...Args> class function; 模板参数说明: Ret: 被调用函数的返回类型 Args…:被调用函数的形参 使用方法: #include

    7810

    面试被问到动态内存分配时需要注意哪些坑,该怎么回答?

    这里的正确实现应该为: 12 free( memoryArea->newArea);free(memoryArea); 3.3 返回值的不正确处理 有时,某些函数会返回对动态分配的内存的引用。...事实上,可以开发某种机制来跟踪这些分配,比如在链表节点本身中保留一个计数器(但您还必须考虑该机制的额外开销)。 5空指针 访问空指针是非常危险的,因为它可能使您的程序崩溃。...每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应首先遍历子内存位置并从那里开始释放,然后再遍历回父节点。 始终正确处理返回动态分配的内存引用的函数返回值。...每个 malloc 都要有一个对应的 free。 确保您不是在访问空指针。 在需要深复制的地方,如果浅复制就会出问题(一旦原指针引用内存释放后)。...以上,动态内存分配的陷阱如何避免的常见方法,欢迎留言。 更多其他文章: 其他|c++几个容易混淆的点 其他|二维指针,数组指针,指针数组

    1.3K30

    【C++】Chapter 0:当你学习C++之前首先需要了解的

    一个变量可以有多个引用 引用一旦引用一个实体,则不可以引用其他实体(java与c++的区别) 作用: 做参数 做返回值 任何场景都可以引用传参 传值和传引用的效率比较: 以值作为参数或者返回值类型...谨慎使用引用做返回值,出了函数作用域就不要使用引用返回。...是,必须在定义时初始化 否,可以为空 是否支持运算 不支持指针运算 支持指针算术运算 可否指向 nullptr 不能 可以 适用场景 更安全,更直观 更灵活,可用于数组、动态分配等 使用引用的场景...nullptr C++ 中的空指针 nullptr 在 C++11 之前,空指针通常用 NULL 或 0 表示。...歧义如下: C++11 引入 nullptr,专门用于表示空指针,避免了 NULL 的问题。 1. nullptr 的特点 nullptr 是指针类型,不是整数,不会与 int 发生混淆。

    7300

    联盟链智能合约安全浅析

    比如在如下if语句,其中func()为程序中定义的一个函数: if (func == nil) { ... } 由于使用func而不是func(),也就是使用的是func的地址而不是函数的返回值...•空指针引用 指针在使用前需要进行健壮性检查,从而避免对空指针进行解引用操作。试图通过空指针对数据进行访问,会导致运行时错误。当程序试图解引用一个期望非空但是实际为空的指针时,会发生空指针解引用错误。...对空指针的解引用会导致未定义的行为。在很多平台上,解引用空指针可能会导致程序异常终止或拒绝服务。如:在 Linux 系统中访问空指针会产生 Segmentation fault 的错误。...如果方法名首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。因此,对于一些敏感操作的内部函数,应尽量保证方法名采用首字母小写开头,防止被外部恶意调用。...•异常处理问题 通常每个函数调用结束后会返回相应的返回参数,错误码,如果未认真检查错误码值而直接使用其返回参数,可能导致越界访问,空指针引用等安全隐患。

    2.2K10

    Java-Optional类源码分析

    1.引出 我们在对象调用对象的方法、域的时候总是要进行判断对象是否为空的操作,即空指针异常(NullPointerException)。...,但由于其可能会被反复调用,: * if (value == null) * throw new NullPointerException(); * return obj...(mapper.apply(value)),否则(value==null)返回一个空的Optional //当Lambda表达式为空时,以及当映射返回值为null时,抛出空指针异常。...value : other; } //16.如果value ≠ null,则返回value, 否则调用实现Supplier接口的对象,调用get方法,返回方法返回值(不一定是value)..."); return Collections.emptyList(); }));  我们之所以不建议返回指向null的list,这是因为由此可能会产生空指针异常,

    59920

    【C++】基础知识讲解(引用、内联、auto,基于范围for循环)

    作返回值 上图中,func返回a的值,但是在函数调用结束时,栈帧就销毁了,这时a返回的就是随机值。但是在VS中,它会先把a拷贝给一个临时变量,然后再把值返回。...传值、传引用效率比较 以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效 率是非常低下的...vs2022的设置方式) 特性 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会 用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运...注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环 指针空值nullptr(C++11) 由于CPP的重载,我们可以判断出第一个打印int,第二个打印int...为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

    23810

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

    传值,传引用效率对比 以值作为参数或者返回值类型, 在传参和返回期间, 函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时拷贝, 因此用值作为参数或者返回值类型, 效率是非常低下的...使用引用可以直接访问对象,而不需要通过解引用符号(*)来获取指针所指向的对象。 引用可以避免指针操作中可能出现的空指针问题,减少了程序出错的概率。...因为引用必须在初始化时指定对象,所以不存在空引用的情况。 引用的底层实现通常是通过指针来实现的,所以引用的效率并不比指针低。只是在使用上更加方便和安全。...特性 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。...指针空值nullptr(C++11) 1.C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。

    11110
    领券