const、static、const staic理解
Table of Contents
- 1 static的理解
- 2 const 新自定义类型 p; 则p不可变
- 3 不可重入函数
- 4 类的static成员变量
- 5 类的const成员变量
- 6 类的static const成员变量
1 static的理解
- 理解
-
- 变量被存储在全局存储区里,可以下次调用的时候仍旧保持原来的值,这是与堆栈变量的区别。
- 变量前static告知编译器,此变量仅在变量的作用范围内有效,这是与全局变量的区别。
- 一个选择题
关于static变量,请选择下面所有说法正确的内容:
- 若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
- 若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
- 设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
- 静态全局变量过大,可那会导致堆栈溢出。
- 答案与分析
对于A,B:根据本篇概述部分的说明b),我们知道,A,B都是正确的。
对于C:根据本篇概述部分的说明a),我们知道,C是正确的(所谓的函数重入问题,下面会详细阐述)。
对于D:静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出,D是错误的。
因此,答案是A、B、C。
2 const 新自定义类型 p; 则p不可变
#include <iostream> using namespace std; typedef char* pchar; int main() {char str[10] = "abcdef";const char* p1 = str;const pchar p2 = str;p1++;p2++;return 0; }
- 上面程序出错的原因
const char* p1 = str; 其中p1是可变指针指向不可变的字符串。所以p1++正确。
typedef char* pchar; 定义了一种新类型,所以 const pchar p2; p2是const类型的,所以p2++出错。
3 不可重入函数
所谓可重入函数就是结果可预测(即只要输入数据相同,输出结果就相同)。
下面的函数就不是可重入函数,因为static的缘故。
unsigned int sum_int( unsigned int base) { unsigned int index; static unsigned int sum = 0; // 注意,是static类型的。 for (index = 1; index <= base; index++) sum += index; return sum; }
4 类的static成员变量
class A { public:static int cnt;A(){cnt++;}static int how_many_instance(){return cnt;} }; int A::cnt = 0; //类的static成员变量必须在类外初始化,并且在加上其类型和类名:: int main() {cout<<A::how_many_instance()<<endl;A a, b, c, d;cout<<A::how_many_instance()<<endl;return 0; }
5 类的const成员变量
- 类的const成员变量只能以初始化列表的形式初始化
class A { public:const int a;A(){a=0;} };
class A { public:const int a;A():a(10){} };
上面程序第一个报错,因为类的const成员变量只能以初始化列表的形式初始化。
6 类的static const成员变量
- static const变量与static变量初始化方式一样
class A { public:static const int a; }; const int A::a = 0;
static const变量与static变量初始化方式一样,只是前者在变量名前加上const。
Author: visaya fan <visayafan[AT]gmail.com>
Date: 2011-08-18 21:51:58
HTML generated by org-mode 6.33x in emacs 23
转载于:https://www.cnblogs.com/visayafan/archive/2011/08/18/2145076.html
const、static、const staic理解相关推荐
- static, const, static const 与 const static
1. static const/ const static, 意义一样 namespace NdpiTransformersTest{class TestMain{public: ~TestMain( ...
- C语言---关于关键字const与static的简单理解
1.const:限定符的一种,个人对const的浅显理解就是一直将const限定的对象看作常量较好理解,声明变量和数组时较简单,在这里主要讲讲在指针和形参中使用const,简单来说const放在*左侧 ...
- typedef,static,const用法
一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const
原文网址:http://www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.html 深入理解const char*p,char cons ...
- 03 - const static extern
const是一个C语言的关键字,它限定一个变量不允许被改变.使用const可以在一定程度上提高程序的安全性和可靠性,再者在看别人的代码作品的时候也可以有助于清晰理解const所起的作用. 1.cons ...
- C语言易混淆关键词详解-const, static, extern, typedef, 声明
Const Const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能 ...
- const static 数组指针
const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 **************常量必须被初始化************************* cons的作用 ...
- only static const integral data members can be initialized within a class
翻译一下:只有静态整型常量数据成员能在类中初始化 那么哪些数据属于整型呢,下面的都是 char short int long long long 所以只有以上这些类型的数据能在类中初始化,也就是你可以 ...
- c++ const static
const作用: 1.定义常量,可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. const int Max = 100; void f(const int i) { i=10;//error ...
最新文章
- 云开发使用 got 的 get/post 传参请求示例代码
- ELECTRA:超越BERT,2019年最佳NLP预训练模型
- 有感于“政府傍大款”----谈中小企业融资问题
- centos 6.5搭建LNMP环境
- 大专计算机单招有哪些,大专单招和统招的区别有哪些
- php 怎么防止提交空记录,为什么空提交什么都不提示?
- 19年8月 字母哥 番外篇:周边技术生态
- swift开发体验,论objective-c与swift的选择
- spark DAGScheduler、TaskSchedule、Executor执行task源码分析
- JS中typeof与instanceof的区别
- 给Win32 GUI程序增加控制台窗口的方法
- 1.docker学习
- mysql增加自定义函数功能
- python—IFrame:在jupyter notebook中展示某个网页的情况
- python自动按键脚本
- 【精选】申请免费的服务器
- Android小技巧
- 前端学习2-JavaScript
- 《蔡康永说话之道》书摘
- python-模块使用方法
热门文章
- python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符
- win7 修复计算机 黑屏,boot bcd修复win7 旗舰版系统黑屏错误代码0xc0000034的解决方法...
- mysql varchar int_MySQL中int、char、varchar的性能浅谈
- 数据结构和算法分析: 第五章 散列
- 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
- c语言最大公约数和最小公倍数_五年级数学最大公因数最小公倍数 练习
- 根据名字,获取线程,进程。
- Metasploit+python生成免杀exe过360杀毒
- Smali源代码分析教程(转)
- 利用U盘进行软件加密(转)