在面对OO编程的时候,所有的成员变量都不应该声明为public,但是也有些人为了操作方便,或者甚至有人认为直接对类的成员进行存取的时候效率要好过通过函数存取。例:
class ExampleA
{
public:
int _A;
int GetA() const{ return _A;}
void Add(int A){_A += A;}
};
ExampleA aa.
1, for(i=0; i<10000000; i++)
{
a._A += i;
}
2, for(i=0; i<10000000; i++)
{
a.Add(i);
}
在未优化的代码1的效率要比2高。而在优化过后的代码,1和2的效率是一样快的,现在的编译器大部分都能
做到这一点的优化。(详见Inside The C++ Object Code).所以说我们使用inline Get & Set函数对内部成员
变量进行存取,是不用担心他的效率问题的。
可能会有人觉得在类ExampleA中的SetA函数中所使用的参数是int而不是使用const int&,这样子也会对效率
有影响,不过在Effective中有一节讲到Prefer pass-by-reference to pass-by-value.在这一节的最后几句讲到
Finally, the brutal fact of the matter is that references are almost always implemented as pointers, so passing something by reference usually means really passing a pointer. As a result, if you have a small object — an int
, for example — it may actually be more efficient to pass it by value than to pass it by
reference.
所以说,对于int这种C++自带的简单类型,使用int的效率比使用const int&的效率并不会慢吧。