C++ C++;声明引用的成本?

C++ C++;声明引用的成本?,c++,reference,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; auto& b=a; func(b); Typename a=Typename();//

声明引用是否会导致运行时成本

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;    
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()//默认构造函数

对于(inti=0;i在引擎盖下,引用通常使用指针实现-因此可能会带来额外的成本(指针的内存成本,以及取消引用操作的运行时成本)。但是,如果引用仅用作本地别名(正如您在这里所做的那样),编译器能够完全优化这一点


不过,此行为可能取决于编译器和优化设置。对于您的特定示例:使用GCC 5.2,禁用优化时,循环内的引用将生成额外的取消引用操作。但是,一旦启用优化,它们都将生成相同的输出。

生成汇编代码。其次,编译器优化技术现在非常优秀。编译器将知道如何优化该循环(至少它应该能够)。“在引擎盖下面,引用是使用指针实现的”-并不总是如此。本地引用通常被严格视为别名,并且应该没有成本。