const int& 是否传递了引用或副本

Alt*_*fry 2 c++ reference constants function

例如,

void func(const int& a);
int main()
{
    int b=1;
    func(b*2);
}
Run Code Online (Sandbox Code Playgroud)

如果const int&会传递一个引用,那么如何才能b*2成为引用呢?

b*2那么这意味着它只传递to的副本func()

但如果是这样,真的func(b)传递了 的引用b吗?

我对吗?

Rem*_*eau 5

在这个例子&中确实表示一个引用,所以它必须引用一个实际的对象。

b*2在内存中创建一个临时 int对象(右值)。当语句func(b*2);完成时(即,当;到达时),该临时文件将被销毁。

当该语句func(b*2)仍在运行时,临时变量仍然存在。对 const 的引用可以绑定到临时/右值对象,这就是代码编译和运行良好的原因。

但是,非常量引用不能绑定到临时/右值,只能绑定到命名变量(左值)。因此,如果您删除const(ie void func(int& a)),则该语句func(b*2)将不再编译。