C ++声明引用的成本?

时间:2015-11-19 02:10:00

标签: c++ reference

在运行时成本中声明参考结果吗?

Typename a;    
auto& b=a;
func(b);

在循环内声明引用会导致多次运行时成本吗?

Typename a=Typename();//default constructor
for(int i=0;i<100;i++)
{
    auto& b=a;
    func(b);
}

或者

Typename a=Typename();//default constructor
auto& b=a;
for(int i=0;i<100;i++)
{
    func(b);
}

更好?

1 个答案:

答案 0 :(得分:0)

在引擎盖下,引用通常使用指针实现 - 因此可能会产生额外的成本(指针的内存成本,以及取消引用操作的运行时成本)。但是,如果引用仅用作本地别名(就像您在此处所做的那样),编译器就能够完全优化它。

此行为可能取决于您的编译器和优化设置。对于您的具体示例:使用GCC 5.2,在禁用优化的情况下,循环内的引用会生成额外的取消引用操作。但是,只要打开优化,它们就会生成相同的输出。