C++关键字(3)

来源:互联网 发布:爱快网络诊断dns未响应 编辑:程序博客网 时间:2024/06/06 01:59

7)friend  声明友元函数或者类

     在本类以外的其它地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其它类的成员函数),在类体中用friend对该函数进行声明,此函数就称为本类的友元函数,一个类的友元函数可以访问这个类中的私有成员或受保护的成员。当然是用友元也破坏了类的封装特性,当对外声明为友元后,你的所有细节全部都暴露给了对方,声明可以有多个,但定义只能有一个。

     一个类的成员函数也可以是另一个类的友元,从而使得一个类的成员函数可以操作另一个类的数据成员。

     整个类也可以成为一个友元类,友类的每个成员函数都可以访问另一个类的所有成员。

8)inline

1.在C中使用宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有参数压栈,代码生成等一系列的操作,因此,效率很高,这是在C中被使用的一个主要原因。2.这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。   
3.在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。   
      inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点:

1.inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
2.很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。
3.inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。

 内联函数一般只会用在函数内容非常简单的时候
摘自:http://blog.csdn.net/victoryknight/article/details/6637520 

9)mutable   mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。

在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

mutable 只能用于类的非静态和非常量数据成员,我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员进行赋值.这个时候就需要用到mutable关键字了.mutable关键字提示编译器该变量可以被类的const函数修改

摘自:http://blog.csdn.net/weiqubo/article/details/6916880