函数声明

EC读书笔记系列之17:条款41、42、43、44、45、46

ぃ、小莉子 提交于 2020-01-09 21:08:56
条款 41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以 函数签名 为中心。多态则是通过virtual函数发生于 运行期 ★对templates而言,接口是隐式的(implicit),奠基于 有效表达式 。多态则是通过 template 具现化 和 函数重载解析 发生于 编译期 条款 42 了解 typename 的双重意义 记住: ★声明template参数时,前缀关键字class和typename可互换( 函数模板或类模板均可 !!!) ★请使用关键字typename标识 嵌套从属类型名称 ;但不得在base class lists或成员初始列内以它作为base class修饰符 --------------------------------------------------------------------- template< class T> class Widget; template< typename T> class Widget; 两者是等效的 ---------------------------- 但有时一定得使用typename: template<typename C> void print2nd( const C& container ) {

前端之js基础篇

岁酱吖の 提交于 2020-01-09 06:42:21
JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。 该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标,JavaScript本身已被Netscape注册为商标。而是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。 因此ECMAScript和JavaScript的关系是, 前者是后者的规格,后者是前者的一种实现 。 ECMAScript的历史 年份 名称 描述 1997 ECMAScript 1 第一个版本 1998 ECMAScript 2 版本变更 1999 ECMAScript 3 添加正则表达式 添加try/catch ECMAScript 4 没有发布 2009 ECMAScript 5 添加"strict mode"严格模式 添加JSON支持 2011 ECMAScript 5.1 版本变更 2015 ECMAScript 6

[C++]C++面试知识总结

只谈情不闲聊 提交于 2020-01-08 23:40:04
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量 Data段:存放初始化过的static变量和全局变量 Text段:存储程序的二进制代码,程序代码区。   堆:程序运行时通过malloc申请的内存区存放在堆中,需要使用free来释放该内存空间,生存期在malloc和free之间。 栈:执行函数时,函数的局部变量存储在栈中,执行结束后自动释放该内存区域,栈内存分配运算内置与处理器指令集中。 C++程序的内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储在静态存储区;另外堆中存放new/delete申请释放的资源,而malloc和free申请的资源存放在自由存储区。 1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小,还有递归函数层次过多超过了栈大小。 堆溢出:程序申请了资源但忘记释放该资源,造成内存泄露,累积泄露内存过多会造成内存溢出。 1.3 内存泄露和检测 C++内存泄漏检测内存泄露是指程序中动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。 动态内存泄露检测:检查new

WPF - 自定义标记扩展

北慕城南 提交于 2020-01-08 08:07:53
  在使用WPF进行编程的过程中,我们常常需要使用XAML的标记扩展:{Binding},{x:Null}等等。那么为什么WPF提供了XAML标记扩展这一功能,我们又如何创建自定义的标记扩展呢。这就是本文将要讨论的内容。 一.从标记扩展的分析说起   在WPF中,软件开发人员需要以类似于XML的格式编写XAML。如下面代码所示: 1 <Window …>2 <StackPanel …>3 <TextBlock …/>4 </StackPanel>5 </Window>   但是在实际开发过程中,我们却常常需要使用标记扩展,如对绑定的使用: 1 <Window …>2 <StackPanel>3 <TextBlock Text="{Binding src:DataSource.Description}"/>4 </StackPanel>5 </Window>   您会好奇,为什么提供这种特殊的语法?其实这是因为XAML本身无法完成某些特定的功能所导致的。如果需要深刻地了解产生该问题的原因,我们就需要从XAML编译器是如何对XAML进行解析的讲起。   无论XAML的最终表示形式是怎样,编译器在处理XAML文件时所得到的都是一个个字符串。一个XML元素的开始常常表示类型实例,而以属性(Attribute)或子元素所表示的XML组成则是在对该类型实例的属性进行设置。在分析对XML属性

构造、析构、拷贝语意学

守給你的承諾、 提交于 2020-01-07 16:53:17
  对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constructor中或者在其他member functions中指定初值 纯虚函数的存在   纯虚函数的意义在于只定义一个可继承的接口,并没有实现(虚函数意义在于定义一个可继承的接口并且有一份缺省实现,普通的成员函数意义在于定义一个可继承的接口并且有一份强制实现)   纯虚函数不能经由虚拟机制调用,但是可以被静态地调用(invoked statically, AbsractClassName::pureFunction() )   对于pure virtual destructor,一定要定义它,因为每一个derived class destructor会被编译器加以扩张,以静态调用的方式调用其”每一个virtual base class”以及”上一层base class”的destructor,因此只要缺乏何一个base class destructor的定义,就会导致链接失败。   编译器不会合成一个pure virtual destructor的函数定义。   一个较好的替代方案就是:不要把virtual destructor声明成pure 虚拟规格的存在   一个函数几乎不会被后继的derived class改写,而且是inline函数

VS 错误处理

喜欢而已 提交于 2020-01-07 12:12:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1错误: fatal error C1010: unexpected endof file while looking for precompiled header. Did you forget to add '#include"StdAfx.h"' to your source? #include"StdAfx.h" 你把这个放在头文件里面就行了 2 vc++ 编程出现错误error C2447: missing function header (old-styleformal list?) 原因:函数后面多了分号; SUNSHINE_APISSN_RETURN SsnWriteProfileString(__in INT nPlugInId, __in_opt LPTSTRlpszGroupName, __in LPTSTR lpszKey, __in LPTSTR lpszValue) ; 3 errorC2491: 'SsnWriteProfileString' : definition of dllimport function not allowed 错误 C2491:“SsnWriteProfileString’:dllimport 函数的定义不允许的 SUNSHINE_API SSN

(Go) 2. 常量与变量

六眼飞鱼酱① 提交于 2020-01-07 08:49:35
一. 变量 1.函数的特征 函数外只能放标识符(变量\常量\函数\类型) 如果要编译一个可执行文件,必须要声明一个main包,且代码中要有main函数 main函数是入口函数,没有参数,也没有返回值 函数外必须以关键字开头 // 第一行必须声明包名 package main// 导入语句 import "fmt" // fmt.Println("from G:") //非法 // 程序的入口函数 func main() { fmt.Println("from G:") } 2.标识符:字母数字下划线,只能以字母和下划线开头 3.25个关键字,37个保留字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 4. 静态语言 :变量必须要声明类型 eg:go 动态语言 :变量无需声明类型,eg: pyhon 5.注释 // 单行注释 /* 多行注释 */ 6.语法知识 // 第一行必须声明包名 package main // 导入fmt包 import "fmt" // 1.申明变量 // 局部变量必须先声明再使用,而且变量必须要使用

0143 JavaScript预解析:概念、变量预解析、函数预解析、函数表达式声明函数问题、案例

心不动则不痛 提交于 2020-01-07 03:20:08
4.1 预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。 JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析 和 代码执行。 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。 【提升到当前作用域的最顶部。】 代码执行: 从上到下执行JS语句。 预解析会把变量和函数的声明在代码执行之前执行完成。 【 声明提前,赋值留在原地 。】 4.2 变量预解析 预解析也叫做变量、函数提升。 变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。 console.log(num); // 结果是多少? var num = 10; // ? 结果:undefined 注意:**变量提升只提升声明,不提升赋值** 4.3 函数预解析 函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。 注意:`函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!` fn(); function fn() { console.log('打印'); } 结果:控制台打印字符串 --- ”打印“ 4.4 函数表达式声明函数问题 函数表达式创建函数,会执行变量提升

0139 函数的两种声明方式

◇◆丶佛笑我妖孽 提交于 2020-01-07 01:29:45
2.8.1 自定义函数方式(命名函数) 利用函数关键字 function 自定义函数方式 // 声明定义方式 function fn() {...} // 调用 fn(); 因为有名字,所以也被称为命名函数 调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面 2.8.2 函数表达式方式(匿名函数) 利用函数表达式方式的写法如下: // 这是函数表达式写法,匿名函数后面跟分号结束 var fn = function(){...}; // 调用的方式,函数调用必须写到函数体下面 fn(); 因为函数没有名字,所以也被称为匿名函数 这个fn 里面存储的是一个函数 函数表达式方式原理跟声明变量方式是一致的 函数调用的代码必须写到函数体后面 // 函数的2中声明方式 // 1. 利用函数关键字自定义函数(命名函数) function fn() { } fn(); // 2. 函数表达式(匿名函数) // var 变量名 = function() {}; var fun = function(aru) { console.log('我是函数表达式'); console.log(aru); } fun('哈哈'); // (1) fun是变量名 不是函数名 // (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数 // (3)

Go从入门到放弃(笔记存档)

岁酱吖の 提交于 2020-01-07 00:49:46
前言 考虑到印象笔记以后不续费了,这里转存到博客园一份 因内容是自己写的笔记, 未作任何润色, 所以看着很精简, 请见谅 查看官方文档 在新的go安装包中,为了减小体积默认去除了go doc 安装go语言后在DOS中输入 godoc -http=:9000 然后在浏览器中打开 127.0.0.1:9000 即可(不能关闭DOS) 该系列参照了大佬的学习路线,加上本人的代码实践,大佬链接 https://www.liwenzhou.com/posts/Go/go_menu 目录结构 GOPATH > src 代码(pkg包/bin编译后文件) > 域名 > 用户名 > 项目 > 模块 双引号单引号 单引号代表字符 > 'a' 双引号代表字符串 > "abcd" 中文最少3位所以只能用双引号 编译代码 进入目录(项目) go build -o 文件名 main.go main.go是项目主入口 调试代码 go run 文件 设置生成文件的格式(跨平台) 命令行 // 生成linux可执行文件 SET CGO_ENABLED=0 //禁用CGO SET GOOS=linux //设置目标平台为linux SET GOARCH=amd64 //目标架构为amd64 // 生成win SET GOOS=windows // 生成mac SET GOOS=darwin git控制 只需控制