C/C++ 函数模板、全局变量、register、存储周期
1.函数声明时可以简写,如:
int max(int,int);
2.函数模板:
格式:
template <typename haha>
或template <class haha>
typename、class为关键字,class也是指函数而非类。
e.g.
template <typename haha>
haha max(haha a,haha b)
{
//xxxxx
}
调用时像调用正常函数一样就行,会根据参数自行重载适合的函数类型。
3.有默认参数的函数:
int length(int l=10);
调用时,
可以length();//l=10;
也可以length(53);//l=53;
若有多个参数,则指定默认值的参数必须在最右端。
4.变量存储属性:
变量存储期指的是变量在内存中存在的周期,即时间起始。
内存中存储空间细分的话可分为5部分,即栈区、堆区、全局区、文字常量区、程序代码区。其中堆区、栈区为动态区,全局区为静态区。
a、栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等。
b、堆区:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
c、全局区:全局变量和静态变量的存储是放在一块的,程序结束后由系统释放。
d、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放。
e、程序代码区:存放函数体的二进制代码。
e.g.
//main.cpp
int a = 0; // 全局初始化区
char *p1; // 全局未初始化区
main()
{
int b; // 栈区
char s[] = "abc"; // 栈区
char *p2; // 栈区
char *p3 = "123456"; // "123456/0" 在常量区,p3在栈区
static int c =0; // 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20); // 分配得来的10和20字节的区域就在堆区
strcpy(p1, "123456"); //"123456/0" 放在常量区,编译器可能会将它
//与p3所指向的"123456"优化成一个地方。
}
变量类型分为4种:auto、static、register、extern。
一般cpu要用哪个数据时,就从内存中把它取出来,包括动态和静态。但是对于有些使用频繁的数据还行速度不够,所以有了register。register就是寄存器变量,将数据存在cpu的寄存器中,而不是内存中,效率更高了。
e.g.
register int i;
现在的编译器可以自动识别使用频繁的变量,所以一般不用register去刻意声明,了解即可。
extern只用于声明,不定义。
C/C++ 函数模板、全局变量、register、存储周期的更多相关文章
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
- JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Javascript学习}
Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript ...
- C++学习之函数模板与类模板
泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思.泛型编程最初诞生于C++中,目的是为了实现C++ ...
- thinkphp5.1 - twig模板-全局变量
thinkphp5.1 - twig模板-全局变量我们在定义 ccs 之类的静态文件的时候,经常会使用<link rel="stylesheet" href="__ ...
- c++函数模板作为类的成员函数,编译报错LNK2019的解决方法
为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...
- C++STL - 函数模板
模板主要是为了泛型编程,做到与类型无关 模板有函数模板和类模板,本文主要整理的是函数模板 1.函数模板定义 template<typename 类型形参1,typename 类型形参2,...& ...
- 使用getopt_long来解析参数的小函数模板
getopt_long原型 #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct o ...
- C++函数重载和函数模板
1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...
- 零值初始化&字符串常数作为函数模板参数
1.在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false). template <typename T> void ...
随机推荐
- SQL外键的作用
貌似很有用,但没有真正用过: SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3) ...
- Android Studio运行app时提示Error: Please select Android SDK
最近开启了一个android项目,点“Run”键运行app,并报错Error:Please select Android SDK: 选择 File -> Project Structure 调整 ...
- Entity FramWork Code first 使用心得
1 最有用的命令 update-database -force -verbose 2 主键如果不是默认的int或者 bigint而是guid 或者 string类型,创建记录的时候要给主键赋值 3 在 ...
- SRM691 Sunnygraphs2
Problem Statement Hero has just constructed a very specific graph. He started with n isolated vertic ...
- silverlight漂亮的文件上传进度显示原理及示例
silverlight漂亮的文件上传进度显示原理及示例 作者:chenxumi 出处:博客园 2009/11/27 13:37:11 阅读 1219 次 概述:在网站根目录web.config里配 ...
- codeforces 688A A. Opponents(水题)
题目链接: A. Opponents time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- js中&&与||
1.a&&b 先将a.b转化为Boolean型,在进行逻辑运算,true 返回b,false 返回a: 2.a||b 先将a.b转化为Boolean型,在进行逻辑运算,true 返回a ...
- bzoj 1112: [POI2008]砖块Klo【对顶堆】
priority_queue实现的对顶堆,细节超级多WA了十几次--但是理论上是最简便的orz其实是我已经不会写平衡树了 枚举左端点,显然要把这一段的高度搞成(l,l+k-1)的高度中位数,所以需要一 ...
- linux 服务器 vim编辑器打开php文件出现中文乱码
进入服务器目录 [root@VM_139_218_centos /]# cd ~ [root@VM_139_218_centos ~]# vim .vimrc 在 .vimrc 文件中写入以下代码: ...
- _bzoj3224 Tyvj 1728 普通平衡树【Splay】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3224 保存splay模版 一刻不停写了一个小时多一点,幸好一遍过了!(其实带着freopen ...