Table of Contents

  • 1 static的理解
  • 2 const 新自定义类型 p; 则p不可变
  • 3 不可重入函数
  • 4 类的static成员变量
  • 5 类的const成员变量
  • 6 类的static const成员变量

1 static的理解

理解
  1. 变量被存储在全局存储区里,可以下次调用的时候仍旧保持原来的值,这是与堆栈变量的区别。
  2. 变量前static告知编译器,此变量仅在变量的作用范围内有效,这是与全局变量的区别。
一个选择题

关于static变量,请选择下面所有说法正确的内容:

  1. 若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
  2. 若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
  3. 设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
  4. 静态全局变量过大,可那会导致堆栈溢出。
答案与分析

对于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理解相关推荐

  1. static, const, static const 与 const static

    1. static const/ const static, 意义一样 namespace NdpiTransformersTest{class TestMain{public: ~TestMain( ...

  2. C语言---关于关键字const与static的简单理解

    1.const:限定符的一种,个人对const的浅显理解就是一直将const限定的对象看作常量较好理解,声明变量和数组时较简单,在这里主要讲讲在指针和形参中使用const,简单来说const放在*左侧 ...

  3. typedef,static,const用法

    一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...

  4. 深入理解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 ...

  5. 03 - const static extern

    const是一个C语言的关键字,它限定一个变量不允许被改变.使用const可以在一定程度上提高程序的安全性和可靠性,再者在看别人的代码作品的时候也可以有助于清晰理解const所起的作用. 1.cons ...

  6. C语言易混淆关键词详解-const, static, extern, typedef, 声明

    Const Const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能 ...

  7. const static 数组指针

    const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 **************常量必须被初始化************************* cons的作用     ...

  8. only static const integral data members can be initialized within a class

    翻译一下:只有静态整型常量数据成员能在类中初始化 那么哪些数据属于整型呢,下面的都是 char short int long long long 所以只有以上这些类型的数据能在类中初始化,也就是你可以 ...

  9. c++ const static

    const作用: 1.定义常量,可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. const int Max = 100; void f(const int i) { i=10;//error ...

最新文章

  1. 云开发使用 got 的 get/post 传参请求示例代码
  2. ELECTRA:超越BERT,2019年最佳NLP预训练模型
  3. 有感于“政府傍大款”----谈中小企业融资问题
  4. centos 6.5搭建LNMP环境
  5. 大专计算机单招有哪些,大专单招和统招的区别有哪些
  6. php 怎么防止提交空记录,为什么空提交什么都不提示?
  7. 19年8月 字母哥 番外篇:周边技术生态
  8. swift开发体验,论objective-c与swift的选择
  9. spark DAGScheduler、TaskSchedule、Executor执行task源码分析
  10. JS中typeof与instanceof的区别
  11. 给Win32 GUI程序增加控制台窗口的方法
  12. 1.docker学习
  13. mysql增加自定义函数功能
  14. python—IFrame:在jupyter notebook中展示某个网页的情况
  15. python自动按键脚本
  16. 【精选】申请免费的服务器
  17. Android小技巧
  18. 前端学习2-JavaScript
  19. 《蔡康永说话之道》书摘
  20. python-模块使用方法

热门文章

  1. python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符
  2. win7 修复计算机 黑屏,boot bcd修复win7 旗舰版系统黑屏错误代码0xc0000034的解决方法...
  3. mysql varchar int_MySQL中int、char、varchar的性能浅谈
  4. 数据结构和算法分析: 第五章 散列
  5. 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
  6. c语言最大公约数和最小公倍数_五年级数学最大公因数最小公倍数 练习
  7. 根据名字,获取线程,进程。
  8. Metasploit+python生成免杀exe过360杀毒
  9. Smali源代码分析教程(转)
  10. 利用U盘进行软件加密(转)