静态函数

静态局部变量的说明

自作多情 提交于 2020-01-11 23:32:53
用static声明静态局部变量 有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保持上一次函数调用结束时的值。这时就该指定该局部变量为静态局部变量(static local varible)。 (1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间,函数调用结束后即释放。 (2) 为静态局部变量赋初值是在编译时进行的,只赋初值一次,在程序运行时已有初值。以后每次调用函数时,不再重新赋值,而只是保留上次函数调用结束时的值。而自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 (3) 如果在定义局部变量时不赋值的话,对静态局部变量来说,编译时自动赋值 0 (对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。 (4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中是“不可见”的。 (5) 静态存储要多占内存(长期占用不释放,而不能像动态存储那样一个存储单元可先后供多个变量使用

静态局部变量

自古美人都是妖i 提交于 2020-01-11 09:11:46
在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。   静态局部变量与全局变量共享全局数据区,但 静态局部变量只在定义它的函数中可见 。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。 对静态局部变量的说明: (1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。 (2) 为静态局部变量赋初值是在编译时进行值的,即 只赋初值一次 ,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 (3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放

C/C++中的const、static、inline、friend、template、virtual、异常机制等特性

徘徊边缘 提交于 2020-01-11 07:16:46
一、const const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。 const修饰变量 变量的值不能改变 const修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量 指针常量:不能通过指针来修改变量的值。 常量指针:一直指向该变量,不能给该指针赋予其他地址 函数中使用const const修饰函数参数 表示参数不可变 若参数为引用,可以增加效率 const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效 const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响

C++中动态联编与静态联编

有些话、适合烂在心里 提交于 2020-01-10 00:20:31
1.函数联编 将代码中的函数调用解释为执行特定的函数代码块,叫做函数联编。 函数联编分为静态联编和动态联编: 静态联编:在编译过程中进行联编,又称早期联编; 动态联编:在程序运行时进行联编,又称晚期联编; 在C++中,动态联编与通过指针和引用调用方法有关,其实可以说,这是由继承控制的。通常,C++不允许将一种类型的地址赋给另一种类型的指针,也不允许一种类型的引用指向另一种类型。 但是,这也有例外,指向基类的引用或指针可以引用派生类对象,而不必进行显式类型转换(将派生类指针或引用转换为基类引用或指针被称为向上强制类型转换);反过来,将基类指针或引用转换为派生类指针或引用被称为向下强制类型转换。注意,如果不使用显式类型转换,则向下强制类型转换是不允许的。 2.结合代码理解 class Animal { //动物基类 private : //...... public : virtual void eat ( ) const { cout << "动物吃方法!!" << endl ; } //...... } ; class Dog : public Animal { //狗类派生于动物类 private : //...... public : void eat ( ) const { cout << "狗吃骨头!!!" << endl ; } //...... } ;

关于static 关键字的总结

喜欢而已 提交于 2020-01-09 08:35:52
转发自:https://www.cnblogs.com/xrq730/p/4820992.html 前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否有钻研精神。 静态变量和静态方法 static关键字最基本的用法是: 1、被static修饰的变量属于类变量,可以通过 类名.变量名 直接引用,而不需要new出一个类来 2、被static修饰的方法属于类方法,可以通过 类名.方法名 直接引用,而不需要new出一个类来 被static修饰的变量、被static修饰的方法统一属于类的 静态资源,是类实例之间共享的,换言之,一处变、处处变 。JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?个人认为主要有三个好处: 1、不同的类有自己的静态资源,这可以实现静态资源分类。比如和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了 2、避免重名。不同的类之间有重名的静态变量名、静态方法名也是很正常的,如果所有的都放在一起不可避免的一个问题就是名字重复,这时候怎么办

测试markdown

試著忘記壹切 提交于 2020-01-08 14:49:38
引言 部署 发生gas但看见阿拉基爱过后阿里加了个哈罗咖喱火锅拉市纪委IE人哈嘎两年来 查的出 擦上档次 cadsc 嗷嗷的阿达adac 擦上档次 擦上档次 1、 接口 www.coolpoker.cn/assess?round=&position=&self_cards=&public_cards&chips=&public_chips=&self_chips= 2、参数介绍 round:int,范围0~3 position:int,范围0~7,0代表dealer 牌的标识: 1~13分别为A23456789TJQK 梅花(Clubs):c,方片(Diamonds):d,红桃(Hearts):h,黑桃(Spades):s 比如2c代表梅花2,Ah地表红桃A self_cards:string,自己的手牌,比如5d7h,代表方片5和红桃7两张牌 public_cards:string,代表当前的公牌,格式同上 chips_index: uint,当前round是第几次加注,大于0 chips:int,跟注的筹码数 public_chips:int,底池的筹码数 self_chips:int,自己手中的筹码数 3、返回结果 json格式 { "ret_code": 0, // 接口正常返回0,只有在该字段为0的情况下才能按其它字段操作 "ret_msg": "ok", "op": 0

前端工程——基础篇

狂风中的少年 提交于 2020-01-07 08:31:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> # 前端工程——基础篇 > 喂喂喂,那个切图的,把页面写好就发给研发工程师套模板吧。 你好,切图仔。 不知道你的团队如何定义前端开发,据我所知,时至今日仍然有很多团队会把前端开发归类为产品或者设计岗位,虽然身份之争多少有些无谓,但我对这种偏见还是心存芥蒂,酝酿了许久,决定写一个系列的文章,试着从工程的角度系统的介绍一下我对前端,尤其是Web前端的理解。 只要我们还把自己的工作看作为一项软件开发活动,那么我相信读过下面的内容你也一定会有所共鸣。 ## 前端,是一种GUI软件 现如今前端可谓包罗万象,产品形态五花八门,涉猎极广,什么高大上的基础库/框架,拽炫酷的宣传页面,还有屌炸天的小游戏……不过这些一两个文件的小项目并非是前端技术的主要应用场景,更具商业价值的则是复杂的Web应用,它们功能完善,界面繁多,为用户提供了完整的产品体验,可能是新闻聚合网站,可能是在线购物平台,可能是社交网络,可能是金融信贷应用,可能是音乐互动社区,也可能是视频上传与分享平台…… > 从本质上讲,所有Web应用都是一种运行在网页浏览器中的软件,这些软件的图形用户界面(Graphical User Interface,简称GUI)即为前端。 如此复杂的Web应用,动辄几十上百人共同开发维护,其前端界面通常也颇具规模

为什么静态变量被认为是邪恶的?

一曲冷凌霜 提交于 2020-01-07 04:22:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我是一位Java程序员,对公司领域来说是新手。 最近,我已经使用 Groovy 和Java开发了一个应用程序。 我编写的所有代码都使用了大量的静态变量。 高级技术人员要求我减少使用的静电数量。 我已经在谷歌上搜索了相同的内容,并且发现许多程序员都反对使用静态变量。 我发现静态变量更易于使用。 而且我认为它们也是有效的(如果我错了,请纠正我),因为如果我必须对一个类中的函数进行10,000次调用,我将很高兴使该方法静态化并使用简单的 Class.methodCall() ,而不是使该类的10,000个实例混乱,对吗? 而且,静态函数减少了对代码其他部分的相互依赖。 他们可以充当完美的国家拥有者。 除此之外,我发现在诸如 Smalltalk 和 Scala的 某些语言中广泛实现了静态方法。 那么,为什么在程序员中(尤其是在Java世界中)普遍存在对静态的这种压迫? PS:如果我对静态的假设是错误的,请纠正我。 #1楼 如果您使用的是'static'关键字,而没有'final'关键字,则这应该是仔细考虑您的设计的信号。 甚至“最终”的存在也不是免费通行证,因为可变的静态最终对象可能同样危险。 我估计大约有85%的时间会看到“静态”而没有“最终”,这是错误的。 通常,我会发现奇怪的解决方法来掩盖或隐藏这些问题。

[技术翻译]使用Nuxt生成静态网站

*爱你&永不变心* 提交于 2020-01-07 00:32:06
本周再来翻译一些技术文章,本次预计翻译三篇文章如下: 04.[译]使用Nuxt生成静态网站 ( Generate Static Websites with Nuxt ) 05.[译]Web网页内容是如何影响电池功耗的 ( How Web Content Can Affect Power Usage ) 06.[译]在现代JavaScript中编写异步任务 ( https://web.dev/off-main-thread/ ) 我翻译的技术文章都放在一个github仓库中,如果觉得有用请点击star收藏。我为什么要创建这个git仓库?目的是通过翻译国外的web相关的技术文章来学习和跟进web发展的新思想和新技术。git仓库地址: https://github.com/yzsunlei/javascript-article-translate 静态网站如今再次流行起来了。信息站和品牌宣传站不再需要使用WordPress之类的内容管理系统来动态更新。 使用静态网站生成器,您可以从无源CMS,API等动态源以及Markdown文件等文件中获取内容。 Nuxt是基于Vue.js的出色的静态网站生成器,可轻松用于构建静态网站。使用Nuxt,从动态内容构建静态网站所需要做的就是创建模板,以从API和Markdown文件等动态源动态显示内容。然后,在Nuxt配置文件中,我们静态定义路由

前端工程化

馋奶兔 提交于 2020-01-04 00:25:23
前端架构: 1.前端工程化 web应用复杂度的增加,特别是单页面应用的风靡。组件化,工程化,自动化成了前端发展的趋势。或者说一线的互联网公司就是这么做的。 每个前端团队都在打造自己的前端开发体系,这通常是一个东拼西凑,逐渐磨合的过程,在技术发展日新月异的今天,这样的过程真的是不可抽象和复制的么?本文希望能够通过系统的拆解前端开发体系为大家提供体系设计思路参考。 前端工程的3个阶段 第一阶段: 库/框架选型 Animate.css jQuery vue.js underscore.js React.js Backbone.js Bootstarp zepto.js jade normalize.css compass Angular.js 解决开发效率 第二阶段: 简单构建优化 选择构建工具,对代码进行压缩,校验,之后再以页面为单位进行简单的资源合并。 第三阶段: JS/CSS模块化开发 解决维护效率 js的模块化方案 ADM/CDM/UMD/ES6 Module css的模块化:less,sass。 第四阶段: 前端是一个技术问题较少,工程问题较多的开发领域 当我们要开发一款完整的Web应用时,前端将面临更多的工程问题,比如: - 大体量:多功能、多页面、多状态、多系统; - 大规模:多人甚至多团队合作开发; - 高性能:CDN部署、缓存控制、文件指纹、缓存复用、请求合并、按需加载