const static

const & static  

static 类型 函数名()
这里的static修饰函数,说明这个函数只具有内部链接属性(只能被本文件内的其它函数调用,不能被其它文件中的函数调用)
const 类型 函数名()
这里的const修饰函数的返回类型,说明返回值不可修改。


const:只读
static:独立分配存储区,记忆功能

默认分类|

1.类里的const成员初始化:
    在一个类里建立一个const时,不能给它初值。像
class foo
{
    private:
    const int i = 100;
    public:
    foo(){}  
    ......
};
这样的初始化方式是不能通过编译的,因为在类对象里进行了存储空间分配,编译器不能知道const的内

容是什么,所以不能把它用作编译期间的常量。这意味着对于类里的常数表达式来说,const就像它在C中

一样没有作用。因此这个初始化工作必须发生在构造函数里,并且,要在构造函数的某个特别的地方。因

为const必须在建立它的地方被初始化,所以在构造函数的主体里,const必须已初始化了,否则,就只有

等待,直到在构造函数主体以后的某个地方给它初始化,这意味着过一会儿才给const初始化。当然,无

法防止在在构造函数主体的不同地方改变const的值。
构造函数初始化表达式
class foo
{
    private:
    const int i = 100;
    public:
    foo(){......}  
    ......
};
如果构造函数是在类外定义,则可以这样写:
class foo
{
    private:
    const int i;
    public:
    foo(); 
    ......
};
 foo::foo(): i(100){......}
 
2.类里的static成员初始化:
    类中的static变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不

能在定义对象时对变量初始化,就是不能用构造函数来初始化。其正确的初始化方式是:
<数据类型><类名>::<静态数据成员名>=<值> ,例如
class foo
{
    private:
    const int i;
    public:
    foo(); 
    ......
};
int foo::i=100;   
这表明:       
(1)初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。   
(2)初始化时不加该成员的访问权限控制符private,public等。   
(3)初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

3.类里的static const 和const static成员初始化:
    在找static成员的初始化学习资料时,笔者发现了网上有很多关于 static const 成员,也就是全局

的静态常量的初始化的资料。const成员要在构造函数初始化,而static成员在需要在在类体外初始化,

那么static const 和 const static 的成员应该在哪里进行初始化呢?这两个写法又会有什么不一样吗

?这引起了笔者的兴趣。在网上查阅了相关资料和做了相关实验后,笔者确认了只要用static关键字修饰

的成员的初始化方式和只有static关键字修饰的成员一样,都必须在类体外初始化,而无论static在

const前面还是后面。比如:
class Test{
           public:
                 static const int MASK1;
                 static const int MASK2;
           };
const int Test::MASK1 = 0xFFFF; 
const int Test::MASK2 = 0xFFFF;
至于两种方式的区别,我还不知道,下面是在网上找到的一个关于它们区别的说法,仅供大家参考:
没有区别。   
一个是静态常量,   
一个是常量静态,   
静态都将存储在全局变量区域,其实最后结果都是一样的。   
可能在不同编译器内,不同处理,但是最后结果是一样的。


文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090208/155025.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值