欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

const、static、const staic理解

发布时间:2025/4/16 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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理解的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。