在运行时成本中声明参考结果吗?
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);
}
更好?
答案 0 :(得分:0)
在引擎盖下,引用通常使用指针实现 - 因此可能会产生额外的成本(指针的内存成本,以及取消引用操作的运行时成本)。但是,如果引用仅用作本地别名(就像您在此处所做的那样),编译器就能够完全优化它。
此行为可能取决于您的编译器和优化设置。对于您的具体示例:使用GCC 5.2,在禁用优化的情况下,循环内的引用会生成额外的取消引用操作。但是,只要打开优化,它们就会生成相同的输出。