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

【C++篇】启航——初识C++(下篇)

; // 错误:引用不能为 NULL std::cout << "b: " << b << std::endl; // 输出 b: 10 return 0; } 试图将引用 c 赋值为...指针:指针是一个变量,它存储一个地址,指向另一个变量的内存位置。指针在定义时不一定要初始化,可以在之后赋值。 (2).初始化 引用:在定义引用时,必须立即初始化并引用一个有效的对象。...int *p; std::cout << sizeof(p); // 输出 4 或 8 (6).安全性 引用:因为引用不能为 NULL,也不会出现悬挂引用的问题,所以相对更安全。...指针:指针容易出现空指针和悬挂指针的问题,需要额外的小心和处理。...不论采取何种定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦,本想通过 f(NULL) 调⽤指针版本的 f(int*) 函数,但是由于 NULL 被定义成0,调⽤了 f(int x) ,因此与程序的初衷相悖

5910

类型声明与空安全(Void Safety)

里面还充斥着很多空判断和 proxy 的代码。这样写代码迅速膨胀了起来。 这个类在后面讲解很多 Kotlin 特性的时候都会引用它,可以多看两眼 开始 crash 分析。...这导致了在空判断时非空,但进入 if 代码块之后,线程被切换了,上层调用了release(),等线程再切回来的时候 mAudioPlayer 已经变成 null 了,再执行就出现了空指针错误。...Kotlin 可空(Nullable)类型的调用 声明一个非空变量,意味着你可以随意的调用他的方法而不用担心空指针错误,相对应的,可空变量则无法保证了。...Kotlin 通过不允许可空变量直接调用方法来保证不会出现空指针错误。那么可空变量应该怎么调用呢? Kotlin 可空变量的调用方法是:调用的”.”号前加”?”或”!!”。...getMyCode() // ok myCode3.toFloat() // ok } 我们可以看到,本来getMyCode()方法返回的是 Int 类型,但由于调用时 a4 为可空类型,所以

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

    C# 可空类型

    概要 C#的可空引用类型是一项功能,允许开发人员在变量、参数、字段、属性和返回值等可能为null的情况下,明确地表示其可以为null,或者不能为null。...这有助于避免在程序运行时出现空引用异常(Null Reference Exception),提高了代码的安全性和可靠性。...通过使用可空引用类型,开发人员可以更早地捕捉到潜在的空引用问题,从而减少了因为空引用而引起的错误。...优缺点有哪些 优点: 更严格的类型检查: 可空类型引入了更严格的类型检查,使得开发人员必须明确处理可能为null的情况,减少了空引用异常的发生,提高了代码的稳定性和可靠性。...可能引发空指针异常: 虽然可空类型减少了空引用异常的发生概率,但如果开发人员不正确地处理可空类型,仍然可能引发空指针异常,因此需要开发人员小心处理可空类型的使用。

    29850

    C++中指针和引用的区别

    注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引用,因此可能引发错误。...引用传递和指针传递是 不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。...; ●引用不能为空,指针可以为空; ●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小; ●指针和引用的自增(++)运算意义不一样; ●引用是类型安全的...引用没有 const,指针有 const,const 的指针不可变;     5. 引用不能为空,指针可以为空;     6....如果你担心这样的代码会出现在你的软件 里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一个引用指向空值的可能性。

    5.1K82

    JavaScript 常见面试题速查

    ,会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的妻子地址。...,如 JSON 中属性值不能为函数,不能出现 NaN 属性值等。...# 异步编程的实现方式 JavaScript 中异步机制可以分以下几种: 回调函数 多个回调函数嵌套的时候会造成回调函数地狱,上下两层的回调函数间的代码耦合度太高,不利于代码的可维护 Promise...Promise 的缺点: 无法取消 Promise,一旦新建它就会立即执行,无法中途取消 如果不设置回调函数,Promise 内部错误抛出,不会反应到外部 当处于 pending 状态时,无法得知目前进展到哪一阶段...,那么每次都会新建一个函数对象,浪费了不必要的内存空间 原型模式 每一个函数都有一个 prototype 属性,这个属性是一个对象,它包含了通过构造函数创建的所有实例都能共享的属性和方法 可以通过使用原型对象来添加公共属性和方法

    52230

    测试左移之代码评审

    1、空指针 如果项目有异常上报统计,就会发现最常见的异常是空指针异常(NullPointerException),代码中如果使用了未初始化的对象都会导致这个异常。...单从本方法的角度来看是不会有问题的,但是在调用本方法的地方,如果忘记做判空处理就会出现空指针的错误。...针对空指针的情况,一般Review以下几点: (1)方法参数如果不能为空时,是否做了判空处理,或者在方法调用者传入参数时是否确保了不为空; (2)方法是否有返回null的情况,如果有是否可以改为返回一个空白对象...(如没有元素的列表等); (3)当被调用的方法(如系统方法)返回为null时,调用者是否有进行判空处理; (4)使用的对象是否在使用时已经被初始化。...如下面的代码所示,当info为空时直接返回了,乍一看似乎没有任何问题;但如果认真地思考后,会发现container对象还在等待一个回调,Review时需要去检查没有执行这个回调方法是否会存在问题。

    1.3K10

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

    「Err」 方法:返回Context 被取消的原因。 「Value」 方法:获取 Context 上绑定的值,是一个键值对,通过 key 来获取对应的值。 5....参数传递中,值、引用及指针之间的区别! 方法的接收者: 值类型,既可以调用值接收者的方法,也可以调用指针接收者的方法; 指针类型,既可以调用指针接收者的方法,也可以调用值接收者的方法。...通常我们使用指针作为方法的接收者的理由: 使用指针方法能够修改接收者指向的值。 可以避免在每次调用方法时复制该值,在值的类型为大型结构体时,这样做会更加高效。 21....无论是值类型的变量还是引用类型的变量亦或是指针类型的变量作为参数传递都会发生值拷贝,开辟新的内存空间。 另外值传递、引用传递和值类型、引用类型是两个不同的概念,不要混淆了。...空 struct{} 的用途? 因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。 将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。

    5.8K32

    3.Writing Larger Programs

    此外,它们都提供了一种访问现有变量的可选方法:指针通过变量的地址,以及通过该变量的另一个名称引用。但是两者有什么区别,什么时候应该使用它们呢?...如果错误地发生这种情况,指针可能指向内存中的任意地址,与该地址关联的数据可能毫无意义,从而导致未定义的行为和难以解决的错误。 引用: 引用不能为空。这意味着引用应该指向程序中有意义的数据。...指针: 指针可以为空。事实上,如果指针没有立即初始化,通常最好将其初始化为nullptr,这是一种表示指针为空的特殊类型。...引用: 当在用于按引用传递的函数中使用时,该引用可以作为相同类型的变量使用。 指针: 在用于按引用传递的函数中使用时,必须取消对指针的引用才能访问基础对象。 引用通常比指针更简单和安全。...但是,如果在创建第一个对象时另一个对象尚不可用,则第一个对象将需要使用指针,而不是引用,因为引用不能为空,只能在创建另一个对象后初始化引用。 5.

    47220

    React Hooks - 缓存记忆

    记忆 & 回调函数 让我们进行一些小的修改,然后将inc按钮添加到所有列表项。需要注意的是,将回调函数传递给已记忆的组件可能会导致细微的错误。...由于我们使用的是内联函数参数,因此会为每次渲染都会创建新的引用,从而使React.memo毫无用处。在记忆组件之前,我们需要一种记忆函数本身的方法。...每次按inc时都会调用renderList。useCallback的默认行为是在传递新的函数实例时计算新值。...在此示例中,每次count更改时,useCallback将返回新的引用。由于计数在每次渲染期间都会更改,因此useCallback将在每个渲染期间返回新值。所以此代码也不会缓存记忆。...由于保证了dispatch在渲染之间具有相同的引用,因此不需要useCallback,这使代码更容易减少了与缓存记忆相关的错误。

    3.6K10

    C++知识总结

    C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。...指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 4....引用没有 const,指针有 const; 5. 引用不能为空,指针可以为空; 6.

    1K40

    Envoy源码分析之Dispatcher

    每次运行runPostCallbacks都会确保所有的任务都执行完。...都是通过裸指针的方式进行回调,如果进行回调的时候对象已经析构了,就会出现野指针的问题,我相信C++水平还可以的同学都会看出这个问题,除非能在逻辑上保证Dispatcher的生命周期比所有对象都短,这样就能保证在回调的时候对象肯定不会析构...可能有人会有疑问,对象在析构的时候把注册的事件取消不就可以避免野指针的问题吗? 那如果事件已经触发了,callback正在等待运行呢? 又或者callback运行了一半呢?...前者libevent是可以保证的,在调用event_del的时候可以把处于等待运行的事件取消掉,但是后者就无能为力了,这个时候如果对象析构了,那行为就是未定义了。...通过这个方法就完美解决了这里遇到的野指针问题了。 或许有人又会想,这里是不是可以用shared_ptr和shared_from_this来解这个呢?

    1.7K40

    深入 C++ 回调

    :total,局部变量的上下文(弱引用,所有权在闭包外) 未绑定的数据:score,每次迭代传递的值 Accumulate Sync 异步回调 (async callback) 在构造后存储起来,在 未来某个时刻...弱引用)上下文 如果弱引用上下文失效,回调应该 及时取消。...—— 基于 C 语言函数指针的回调: 由于 没有闭包,需要函数管理上下文生命周期,即 申请/释放上下文 由于 资源所有权不明确,难以判断指针 T* 表示 强引用还是弱引用 例如,使用 libevent...:每次传递 buffer 指针,DoSendRepeating 只使用 buffer的数据(DoSendRepeating 不销毁 弱引用参数) 闭包销毁时:总是由闭包销毁 buffer(有且只有一处销毁的地方...2.3 如何传递(强引用)上下文 根据 可拷贝性,强引用上下文又分为两类: 不可拷贝的 互斥所有权 (exclusive ownership),例如 std::unique_ptr 可拷贝的 共享所有权

    9.4K106

    你有没有掉进去过这些 Exception 的“陷阱”(Part A)

    一、到底什么是空指针异常 空指针会出现在很多语言中,java中空指针异常指的是java.lang.NullPointException,我们都知道对象是保存在内存中的空指针异常中,空是内存地址为空,指针则是指该对象被别的对象指向或引用...,当引用时就会爆出异常对象(引用数据类型)如果没有初始化操作就是null,这就是产生空指针异常的根本原因 二、常见空指针异常 新建maven项目 exception-traps,增加junit和lombok...规避空指针异常的建议 拆箱是通过调用包装器类的 xxxValue 方法实现的,也就是说当包装类为空时调用方法就会出现空指针异常 基本数据类型和引用数据类型,优先考虑基本数据类型 对于不确定的包装器类型进行判断校验...,这种情况就相当于与空对象调用属性,所以会出现空指针异常 非null字符串与可能为null的字符串使用equals()方法比较时,应该将可能为null的字符串放在equals()方法参数中,才能够进行比较...控制台出现空指针异常 查看ArrayList的addAll()方法的源码 这里使用了toArray()方法,由于参数本身是null,所以执行会报错

    42620

    QT(C++)面试总结

    (4)槽可以被取消链接 这种情况并不经常出现,因为当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽。...; ④作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象; ⑤可以有const指针,但是没有const引用; ⑥指针在使用中可以指向其它对象,但是引用只能是一个对象的引用...被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。...②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。...,希望链接成一个完整的可执行文件时,就会出现大量错误,因为每一个相同的头文件都会进行所谓的“重定义”;而加上上面那三句,则不会出现“重定义”的情况。

    2.1K10

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

    ,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。...C语言标准(如C89/C90)规定,函数内部的局部变量默认是自动存储期限(auto storage duration),这意味着每次函数被调用时,这些变量都会被创建和初始化,当函数返回时,这些变量就会被销毁...指针空值nullptr(C++11) C++98中的指针空值 在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现 不可预料的错误,比如未初始化的指针。...不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的 初衷相悖...在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。 2.

    17410

    【编程基础】C语言内存使用的常见问题

    然而,堆内存使用时很容易出现内存泄露、内存越界和重复释放等严重问题。 一、 数据区内存 1内存越界 内存越界访问分为读越界和写越界。...4 返回栈内存地址 (被调)函数内的局部变量在函数返回时被释放,不应被外部引用。虽然并非真正的释放,通过内存地址仍可能访问该栈区变量,但其安全性不被保证。...一旦链接错误的库,则可能出现某个内存管理器中分配的内存,在另一个内存管理器中释放的问题。...即发生内存泄漏的代码被多次执行,每次执行都会泄漏一块内存。 2) 偶发性内存泄漏。即发生内存泄漏的代码只发生在特定环境或操作下。特定的环境或操作下,偶发性泄漏也会成为常发性泄漏。...若该指针还存在多个副本,则必须保证当它所指向的动态内存被释放后,不再使用所有其他副本。 避免上述错误发生的常用方法是释放内存后立即将对应的指针设置为空(NULL)。

    3.4K60

    使用了这个神器,让我的代码bug少了一半

    1.3 糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。...在出现的文档页面中可以选择版本,目前最新的版本是8.5。...除了免费和开源之外,PostgreSQL也是高度可扩展的。例如,您可以定义自己的数据类型,构建自定义函数,甚至可以使用不同的编程语言编写代码,而无需重新编译数据库。...只需取消注释并配置所需的模板,然后注释掉专用于H2的行: Example for PostgreSQL sonar.jdbc.username=sonarqube sonar.jdbc.password...空指针问题: ? 错误的用法: ? SimpleDateFormat不应该被定义成static的。 检测出的代码问题类型太多,这里就不一一列举了。总之,记住一句话:sonar很牛逼。

    2.1K40

    app自动化面试题

    通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。...2.程序逻辑错误:数组越界、堆栈溢出、并发操作、逻辑错误。 e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。...方法一:app开发保存错误日志到本地 一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就可以了 方法二:实时抓取 可以自己开着logcat...常见的几种如下: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。...4)卸载过程中出现的意外情况的测试(如死机、断电、重启)。 5)卸载是否支持取消功能,单击取消后软件卸载的情况 。 6)系统直接卸载UI测试,是否有卸载状态进度条提示 19什么是弱网测试?

    1.4K20

    前端面试指南--JS面试题总结

    引用数据类型在**栈中存储了指针**,该指针指向的**数据实体存储在堆中**。 3. 判断数据类型的方法有哪些?...每次 Tick 的过程就是查看是否有待处理事件,如果有则取出相关事件及回调函数放入执行栈中由主线程执行。...只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。 16. 什么是AJAX?...Promise的缺点有如下三个缺点: (1)Promise一旦执行便无法被取消; (2)不可设置回调函数,其内部发生的错误无法捕获; (3)当处于pending状态时,无法得知其具体发展到了哪个阶段...)或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

    89030

    前端面试指南之JS面试题总结

    引用数据类型在**栈中存储了指针**,该指针指向的**数据实体存储在堆中**。 3. 判断数据类型的方法有哪些?...每次 Tick 的过程就是查看是否有待处理事件,如果有则取出相关事件及回调函数放入执行栈中由主线程执行。...只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。 16. 什么是AJAX?...Promise的缺点有如下三个缺点: (1)Promise一旦执行便无法被取消; (2)不可设置回调函数,其内部发生的错误无法捕获; (3)当处于pending状态时,无法得知其具体发展到了哪个阶段...)或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

    83500
    领券