请考虑以下情况:
void func(const A& a)
{
//Case 1:
const int& val = a->b->c->d;
func1(val);
func2(val);
//Case 2:
func1(a->b->c->d);
func2(a->b->c->d);
//Case3:
int val = a->b->c->d;
func1(val);
func2(val);
}
关于可读性,Case3是最直接的。
关于速度,在一个不错的编译器中,以上所有情况都相等吗?如果不是,哪些情况是最快和最慢的?
假设所有指针都是裸指针,并且它们指向堆中的对象。
更新:假设参数是一个const
,如上所示,因此func1和func2可以通过值或const引用来获取参数。
func1
可以修改a
、a->b
、a->b->c
和/或a->b->c->d
,那么这三个代码片段实际上可能是不等价的。因此,编译器将它们全部优化成相同的代码的唯一方法是,如果它可以访问func1
的定义或以某种方式确认它们是功能等价的。 - ruakhfunc1
只传递了d
的值,那么它如何修改a
、b
或c
? - Dave Ragera
是一个全局变量。 - Ben Voigt