黑马程序员技术交流社区

标题: Const [打印本页]

作者: 善良的禽兽    时间: 2015-9-30 07:48
标题: Const



[url=]1 static的理解[/url]


1 static的理解理解
一个选择题
关于static变量,请选择下面所有说法正确的内容:
答案与分析
对于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。









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2