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

【笔记】《C++Primer》—— 第19章:特殊工具与技术

这个类型主要是让我们可以将一组整型常量组织在一起,像一个简单文件夹一样 C原本只有一种枚举类型:不限定作用枚举。C11加入了限定作用枚举。...不限定作用枚举和我们知道一样,enum TypeName{mem1, mem2, mem3}; 这里obj必须是整型,可以花括号中直接用整型初始化成员。...限定作用枚举类定义时需要加class/struct,即如enum class TypeName{mem1, mem2, mem3}; 限定作用枚举类成员由于作用枚举类内部,所以必须通过访问符才能得到...,避免了名称冲突问题 默认情况下枚举值0开始,逐个加1,值不一定唯一 枚举成员是const,因此我们初始化时必须用const,使用时候也可以当作const使用 枚举类成员初始化后就必须使用同枚举类成员才能赋值了...局部类内还可以嵌套类,但是嵌套类可以定义局部类外部,但是必须定义局部类相同作用局部类内嵌套类本质也属于一个局部类,所以嵌套类自身成员必须定义嵌套类内部 19.8 固有的不可移植特性

80540

【笔记】《C++Primer》—— 第一部分:C++基础

,要求不能跳过变量初始化而使用变量,且每个case都有内部一个作用 只要控制结构为真while便会不断执行循环体,如果在while控制结构或循环体定义变量的话,这个变量将会在每次迭代创建又销毁...swicth类似,不能将程序运行凌驾在变量作用上 C++异常类标准库中有定义,分别在stdexcept,exception,new,type_inifo四个头文件,每个异常我们使用它们都有的...,表示忽视多余实参 不要返回不可拷贝局部变量,也不要返回局部变量引用或指针 C11规定可以使用花括号,利用vector类型来返回列表值 返回数组指针时,要注意保持好正确写法:先看括号,括号内往括号外看...因此一方面是最好保持参数顺序与声明顺序相同以方便查找,另一方面尽量避免用某些成员来初始化其他成员以防止初始化顺序导致问题 C11增加了“委托构造函数”,即可以构造函数初始值列调用非委托构造函数了...由于类内初始化只是声明而已,若外部函数没有获得类完整声明则无法使用类内静态初始化,所以我们应该保持一个良好习惯即即便我们已经类内初始化它,也在外部进行一次定义(但不用初始化)来保证其作用正常

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

C语言内存讲解-详说内存分布和heap空间

全局初始化数据区/静态数据区(data段) 该区包含了程序明确被初始化全局变量、已经初始化静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。...栈区(stack) 栈是一种先进后出内存结构,由编译器自动分配释放,存放函数参数值、返回值、局部变量等。程序运行过程实时加载和释放,因此,局部变量生存周期为申请到释放该段栈空间。...变量 局部变量:  概念:定义函数内部变量。  作用定义位置开始,到包裹该变量第一个右大括号结束。  生命周期:局部变量:变量定义开始,函数调用完成。...全局变量: 概念:定义函数 外 部变量。 作用定义位置开始,默认到本文件内部。 其他文件如果想使用,可以通过声明方式将作用导出。 生命周期: 程序启动开始,程序终止结束。  ...作用定义位置开始,到包裹该变量第一个右大括号结束。  生命周期:程序启动开始,程序终止结束。

52630

【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈

使用局部变量注意以下问题:   不同函数可以使用相同名字变量,它们代表不同对象,互不干扰。   形式参数也是局部变量。   局部变量作用函数内部。...9.3.4      变量存储类别 变量作用来分,可以分为全局变量和局部变量,而变量值存在时间来看,可以分为静态存储方式和动态存储方式。  ...全局变量存储静态存储区,动态存储区可以存放以下数据:   函数形式参数,调用函数时给形参分配存储空间。   局部变量(未加static声明局部变量)。   函数调用时现场保护和返回地址等。...全局变量用static声明,则该变量作用只限于本文件模块(即被声明文件)。...9.4   堆栈 9.4.1      堆栈作用 栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数形参等。

76860

【笔记】《C++Primer》—— 第四部分:高级主题(完)

,此时称为未命名命名空间,在这里面定义变量有静态生命周期,第一次使用时创建,然后直到程序结束才销毁 using声明可以一次引入一个成员,生命周期声明开始到声明所处作用结束为止 using指示可直接...编译器是先按顺序初始化所有的虚基类,然后再按顺序初始化非虚基类,初始化时候按照底往上,同级时候列表左往右顺序初始化 19 特殊工具与技术 准确来说实际上我们并不能重载new和delete...C11加入了限定作用枚举 不限定作用枚举类名称是可选,如果这个enum未命名,则必须在定义该enum时就定义它们成员。...限定作用枚举类定义时需要加class/struct,即如enum class TypeName{mem1, mem2, mem3}; 限定作用枚举类成员由于作用枚举类内部,所以必须通过访问符才能得到...局部类是定义函数内部类,局部定义只定义它作用域中可见 局部特点是其所有成员都必须在类内完成定义 同样局部类和函数之间没有权限特权 局部类内嵌套类本质也属于一个局部类,所以嵌套类自身成员必须定义嵌套类内部

83510

C语言中,全局变量滥用后果竟如此严重?

全局变量既可以是某对象函数创建,也可以是本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。 作用看: 全局变量具有全局作用。...全局变量只需一个源文件定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义源文件需要用extern关键字再次声明这个全局变量。 静态局部变量具有局部作用。...局部变量也只有局部作用,他是自动对象,他程序运行期间不是一直存在,而是只函数执行期间存在,函数一次调用结束后,变量就被撤销,其所占用内存也被收回。...而静态全局变量则限制了其作用,即只定义该变量源文件内有效,同一源程序其他源文件不能使用它。...局部变量:定义它函数内有效,但是函数返回后失效。“函数内定义变量”,即在一个函数内部定义变量,只本函数范围内有效。 注意:全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。

1.2K20

效率编程 之「通用程序设计」

第 1 条:将局部变量作用最小化 要使局部变量作用最小化,最有力方法就是第一次使用它地方声明。局部变量作用它被声明点开始扩展,一直到外围块结束处。...如果变量是“使用它块”之外被声明,当程序退出该块之后,该变量仍然是可见;如果变量目标使用区域之前或者之后被意外地使用的话,后果将可能是灾难性。...几乎每个局部变量声明都应该包含一个初始化表达式。如果我们还没有足够信息来对一个变量进行有意义初始化,就应该推迟这个声明,直到可以初始化为止。这条规则有一个例外情况与try-catch语句有关。...循环中提供了特殊机会来将变量作用最小化。无论是传统还是高级for循环,都允许声明循环变量,它们作用被限定在正好需要范围之内,这个范围包括循环体,以及循环体之前初始化、测试、更新部分。...System.out.println(face1 + " " + face2); } } 最后一种“将局部变量作用最小化”方式是使方法小而集中。

68910

《JavaScript高级程序设计(第四版)》学习笔记(四)第4章

在按引用传递参数时,值在内存位置会被保存在局部变量,对本地变量修改会反映到函数外部 4.1.4 确定类型 采用typeof操作符用于判断一个变量是否为原始值。...检测原始值,则返回 false typeof 用来检测函数时返回 function 4.2 执行上下文与作用 执行上下文:当js脚本执行时,执行环境会自动创建一个上线文栈,用于保存当前执行环境...使用 var 函数作用声明 使用var 声明变量时,变量会被自动添加到最接近上下文,未声明直接初始化变量会添加到全局作用 未经声明而初始化变量是JavaScript 编程中一个非常常见错误...使用 let 块级作用声明 let 声明变量作用是块级,变量只最近花括号内有效 if(true) { let a; //仅在块内有效 } 与 var 另一个不同在于,同一个作用内不能重复声明两次...标记“离开环境”就回收内存。 工作流程: 垃圾回收器在运行时候会给存储在内存所有变量都加上标记。 去掉环境变量以及被环境变量引用变量标记。

50320

【笔记】《C++Primer》—— 第18章:用于大型程序工具

标准库类型都保证自己析构不会抛出异常 异常自然也可能在构造函数出现,如果我们构造函数体初始化成员自然可以用try-catch处理,但是初始值列表返回之外,为了处理初始值列表异常我们需要用函数try...,不用特指,和模板内部调用成员类似 我们也可以命名空间外部定义命名空间内成员,但是注意只能是在外层,不能在不相干同级作用域中定义 全局作用实际上是一个无名命名空间,我们用::XXX来特指 C11...未命名命名空间中名字作用其所在空间相同,如果定义全局区域则相当于全局作用,定义别的空间中则相当于其他命名空间 除了直接特指命名空间中名称来进行调用外,我们也可以用using XXX...要注意是基类构造顺序是与派生列表基类出现顺序一致,与派生类参数顺序无关 C11允许派生类多个基类中继承构造函数,但是如果多个构造函数都相同的话将产生错误,此时派生类应该自己定义一个构造函数来覆盖它们...,初始化时候按照底往上,同级时候列表左往右顺序初始化,可以用下面例子加深理解 ?

92220

C++内存布局

代码区通常是只读,使其只读原因是防止程序意外地修改了它指令。另外,代码区还规划了局部变量相关信息。...2.4 栈区(stack)栈是一种先进后出内存结构,由编译器自动分配释放,存放函数参数值、返回值、局部变量等。程序运行过程实时加载和释放,因此,局部变量生存周期为申请到释放该段栈空间。...,在内存bss段c是一个未初始化局部变量,作用为函数func体内,即仅在函数体内可见,生命期也是函数体内,在内存d是一个未初始化静态局部变量,作用为函数func体内,即仅在函数体内可见,...生命期是整个程序运行期间,在内存bss段e是一个未初始化局部变量,作用为函数main体内,即仅在函数体内可见,生命期是main函数内,在内存pi是一个局部指针,指向堆一块内存块,该块大小为...sizeof(int),pi本身存储在内存,生命期是main函数内新申请内存块,生命期是malloc/free之间图解如下图片加深记忆再次理解图片变量作用生命周期和储存位置图片测试作用

300101

React Native for Android源码分析 一《JNI智能指针之介绍篇》

但由于局部引用表容量有限,返回至JVM前,可以调用DeleteLocalRef先行销毁,避免局部引用表超限引起崩溃。...弱全局引用 与全局引用一样具有全局作用,但不会影响GC回收, GC可以随时回收该引用对应java object。...由上可见,JNI智能指针第一个需求,就是要自动管理jobject生命周期,当进入与离开对应作用时,需要自动调用对应生命周期创建与销毁函数。这在C++,通常会结合构造与析构函数来进行配对调用。...若功能仅限于此,就与普通智能指针和mutext锁管理机制类似了,更重要需求是C++层提供与被管理Java对象镜像结构C++对象,形成高层次封装。...综上介绍,ReactNative for Android,为了简化Native层对Java层调用,提供了镜像结构wrapper class,结合智能指针,将jobject生命周期管理、java

1.2K50

深入理解JavaScript闭包之什么是闭包

然后,使用 this、arguments 和其他命名参数值来初始化函数活动对象。...,其中不同地方就是在于内部函数 bar 执行前,外部函数返回。...bar() 依然持有对该作用引用,这个引用就叫做闭包。这个函数定义词法作用以外地方被调用。闭包使得函数可以继续访问定义时词法作用。...这样修改之后,每次迭代内使用 IIFE(立即执行函数)会为每个迭代都生成一个新作用,使得延迟函数回调可以将新作用封闭每个迭代内部,每个迭代内部都会含有一个具有正确值变量可以访问。...因为函数是 JavaScript 唯一拥有自身作用结构,因此闭包创建依赖于函数。 需要注意点 容易导致内存泄漏。闭包会携带包含它函数作用,因此会比其他函数占用更多内存。

80230

【Java基础】类成员总结(属性,方法,构造器,代码块,内部类)

1.属性 属性 = 成员变量 = field = 、字段 类属性使用: 属性(成员变量) vs 局部变量 1.相同点: 1.1 定义变量格式:数据类型 变量名 = 变量值 1.2...先声明,后使用 1.3 变量都有其对应作用 2.不同点: 2.1 声明位置不同 属性:直接定义一对{}内 局部变量:声明方法内、方法形参、代码块内、构造器形参、构造器内部变量...静态代码块内只能调用静态属性、静态方法,不能调用非静态结构 非静态代码块 内部可以有输出语句 随着对象创建而执行 每创建一个对象,就执行一次非静态代码块 作用:可以创建对象时,...对对象属性等进行初始化 如果一个类定义了多个非静态代码块,则按照声明先后顺序执行 非静态代码块内可以调用静态属性、静态方法,或非静态属性、非静态 5.内部类 Java,可以将一个类定义另一个类里面或者一个方法里边...言外之意,不使用final,就可以被继承 可以被abstract修饰,可以被static修饰 2.局部内部类 (1)局部内部类是定义一个方法或者一个作用里面的类,它和成员内部类区别在于局部内部类访问仅限于方法内或者该作用

41130

【笔记】《C++Primer》—— 第6章:函数

当函数被调用时,调用带来实参会被初始化给形参(类似新定义变量),原函数执行中断被调函数开始执行,直到return 要注意赋值给形参时候,函数没有规定实参求值顺序 形参必定会被拷贝初始化(显式赋值或默认赋值...若将局部变量用static创建,则得到局部静态对象,此时它只能在此作用域中使用但生命周期直到程序终结 函数声明也叫做函数原型,含有函数声明头文件应被包含到定义函数源文件 6.2 参数传递 函数形参可以是引用类型...返回原理实际上用结尾return初始化一个临时量作为结果,也是拷贝得到,所以要谨记不要返回不可拷贝局部变量,也不要返回局部变量引用或指针,例如不要返回局部数组指针。...返回数组指针时,要注意保持好正确写法:先看括号,括号内往括号外看,然后数组括号对应是前面紧接着数组名,数组具体元素类型要看数组前面的类型名,用括号来使星号和引用号与类型名相隔离(下面的例子若去掉括号会变为拥有十个...上面一条可以看到这样func声明会变得非常复杂,C11增加了一种更加清晰声明方法称为尾置返回类型,方法是写一个返回类型为auto函数,然后声明后面用箭头号->指出真正返回类型 ?

68530

萌新java学习之路——第一周

局部变量有且只能在当前所处代码块中使用,超出当前代码块范围无效!!!【作用问题】 作用范围以内,任何地方可以直接使用对应变量 一个变量作用范围以内,不能重定义同名变量,报错!...局部变量未赋值不能使用 9 循环结构 9.1 为什么使用循环 开发我们会使用一些功能代码多次,如果使用CV大法,治标不治本!!!会出现一下一些问题: 1. 代码过于臃肿!!!...void: 返回值类型,这里void表示没有返回值 main: 方法名,需要符合小驼峰命名法,见名知,动宾结构 (String[] args): 形式参数列表 { 方法体 } 方法模版: public...一个方法有且只能有一个返回值类型。 目前建议: 当下不要考虑使用数组作为返回值类型。 10.7.3 方法名 见名知,动宾结构,小驼峰命名法!!! 希望大家代码是一个好代码。...顺序也是一致! 考虑好对应数据类型。 10.7.5 方法封装过程 需求分析 1. 分析需求作用是什么? 2. 考虑方法名字,见名知,动宾结构,小驼峰命名法 3.

51420

C语言万字基础笔记总结(三)

120进行分开赋值,打印结果应该是赋值后值;第三次打印,是main函数,由于a是全局变量,func对其影响是有的,所以a=119继续保持,而bfunc变成了局部变量,赋值仅仅作用在func函数...三、作用 当变量被定义程序不同位置时,它作用范围时不一样,这个作用范围就是作用。...C语言编译器可以确认4种不同作用 ①、代码块作用 ②、文件作用 ③、原型作用 ④、函数作用 四、链接属性 external(外部) 多个文件声明同名标识符表示同一个实体 internal...这部分区域大小程序运行前就已经确定,并且内存区域通常属于只读。代码段,也有可能包含一些只读常数变量,例如字符串常量等。 数据段 通常用来存放已经初始化去那句变量和局部静态变量。...宏定义作用定义位置开始到整个程序结束。

87420

【JavaScript】 基础

") typeof NaN Number(undefined) Number(null) parseInt(param) 参数为要解析数据 作用数据解析整数值 过程 : 1....作用 JavaScript 作用分为全局作用和函数作用,以函数{ }作为划分作用依据 全局变量和全局函数 只要在函数外部使用 var 关键字定义变量,或函数都是全局变量和全局函数,在任何地方都可以访问...所有省略 var 关键字定义变量,一律是全局变量 局部变量/局部函数 函数内部使用 var 关键字定义变量为局部变量,函数内部定义函数也为局部函数,只能在当前作用域中使用,外界无法访问 作用链...局部作用域中访问变量或函数,首先从当前作用域中查找,当前作用域中没有的话,向上级作用域中查找,直至全局作用 Array 数组 创建 var arr = []; 特点 数组用于存储若干数据,...返回添加之后数组长度 shift() 移除数组第一个元素 返回被移除元素 splice(index,num) 数组添加 / 删除项目 返回被删除项目 toString() 将数组转换成字符串类型

2.1K20

第十节(变量作用

详细介绍局部变量和外部变量之前,我们先要理解作用重要性。 1.2作用重要性 要理解变量作用重要性,先回顾一下第5节讨论结构化编程。...注意: 如果在声明外部变量时未显式初始化它,编译器会自动将其初始化为0. 2.1外部变量作用 外部变量作用是整个程序。这意味着程序,外部变量对main()函数和其他所有函数都可见。...CPU必 须内存中将数据把至寄存器才能执行一些操作,然后再将数据返回到内存寄存器和内存间移动数据需要一些时间。如果一开始就把某些变量放在寄存器,操纵数据速度会更快。...这意味着定义main()函数局部变量,程序开始执行时被创建,其生命期是被创建开始至程序结束。 但是,静态局部变量概念是两次调用main()函数期间其值保持不变,这说不通。...C语言中所有变量,无论是简单变量、数组还是结构,都有一个指定存储类别,用于决定变量作用(程序何处可见)和生命期(变量在内存存活时间)。 对于结构化编程,正确使用存储类别非常重要。

16740

重新回味·Block·

,需要在初始化结构体函数添加与局部变量相同类型参数; 3、局部变量就通过初始化构造函数传递到Block结构体__testBlock_block_impl_0,同时赋值给Block成员变量; 4、...通过上述截获局部变量理论,C语言数组会作为成员变量保存到Block实例结构初始化Block时,由成员变量赋值给局部变量,猜测代码如下: void func(char a[]){ char...前面的小节,我们仅仅讲解了Block截获局部变量,那么,Block修改截获局部变量又会带来什么样问题呢?...Block变量作用之外通过指针访问使用,定义栈上__block局部变量和Block超出作用时将被废弃。...__block变量对象也被栈复制到堆上,当__block变量堆上释放时,该对象才能得到释放; 当使用__weak修饰__block变量赋值时候,由于赋值对象作用问题而释放,从而导致__block

62140

全栈必备 :C语言基础

C99,又增加了5个关键字inline restrict _Bool _Complex _Imaginary, 后来C11又增加了7个关键字_Alignas _Alignof _Atomic _...函数返回指针时可能存在潜在问题: 返回初始化指针 返回指向无效地址指针 返回局部变量指针 返回指针但是没有释放内存 函数指针可以 以编译时未确定顺序来执行函数。...static无论是全局还是局部,都存储在数据区,其生命周期为整个程序,如果是静态局部变量,其作用为一对{}内,如果是静态全局变量,其作用为当前文件。...运行时 C语言运行时数据结构,堆栈为局部变量提供存储空间,为函数调用提供还原信息,其临时存储区,用于计算复杂算术表达式;调用记录支持过程调用,并记录调用结束后返回调用点所需要全部信息;全局变量数据有...关于这部分代码对于开发者不可见,属于C标准运行时一部分。 函数调用和被调用过程,都伴随着入栈和出栈,因此栈发挥着重要作用。函数局部变量、参数、返回值都存在栈区

1.1K30
领券