内联函数和域空间

来源:互联网 发布:docker hub php 编辑:程序博客网 时间:2024/05/16 03:44

一、在游戏编程中,真正耗费内存和磁盘的常常是游戏所表现出来的图形、图像和声音。即使使用很多内联成员函数,代码还是相对比较小。尽管使每个成员函数都成为内联函数并不好,但完全不必担心程序的大小。速度才是最重要的因素。

 

把成员函数的代码放如类定义中。这种方式定义的函数就叫内联成员函数。程序使用内联成员函数的方式可以与类外部定义的成员函数的使用方式完全相同。但是,内联函数和外联函数之间还是有一点区别的:定义一个内联函数时,编译器会把内联函数的代码替换到程序中。使用非内联函数时,就不会这样做。

        但是我们不能让所有的函数都内联。第一,编译器不允许。编译内联函数只是一个建议而不是命令。第二,内联函数会使程序非常大。第三,它使类很难阅读。

        通常,除了获取和设置成员数据的值之外,内联成员函数不应该做更多的事情。

        在游戏编程中,真正耗费内存和磁盘的常常是游戏所表现出来的图形、图像和声音。即使使用很多内联成员函数,代码还是相对比较小。尽管使每个成员函数都成为内联函数并不好,但完全不必担心程序的大小。速度才是最重要的因素。

        利用内联成员函数的优点而有不会把类搞得乱七八糟的另一种方法是外联的内联函数。就是将所有的函数移到类定义的外部,只有函数原型保持在类定义中。每个成员函数的开头都有c++的关键字inline。使用这种方式可以让类定义更加简短,可读性更好,但却依然可以利用内联函数的优点。 

 

 

二、在C++中,程序中的每个类的名字都是独一无二的,他们不能是具有相同名字的两个类。这带来一个潜在问题,游戏中包含很多的数学运算。假设决定在游戏中使用其他人编写的数学库。这些库中很可能包含同样名字的类。这个时候,就不能判断到底是哪个库中的类。

      解决这个问题就要用到名字空间。名字空间是把相关的类分组的一种方法。实际上,它不仅可以用于类,也可以对相关的类、函数或者结构进行分组。调用时就用到域解析操作符。比如:

anamespace::point righthere;

anothernamespace::point righthere;

anamespace和anothernamespace是两个名字空间,他们都包含一个叫做point的类。第一行是anamespace中的point类,第二行是anothernamespace中的类。

发生任何冲突的时候,都可以使用域解析操作符来指明使用的是哪个具体的类,从而解决冲突问题。