我想了解如何引用初始化。例如,我们看一个典型的例子。
double val = 4.55;
const int &ref = val;
Run Code Online (Sandbox Code Playgroud)
我可以想到上面代码片段中发生的事情的两种可能性。
通常的解释如下:
这里创建了一个带有值类型的临时(纯右值),然后将引用绑定到这个临时(纯右值)对象,而不是直接绑定到变量。发生这种情况是因为右侧变量的类型是,而左侧我们有一个引用。但是为了将引用绑定到变量,类型应该匹配。此外,临时纯右值的生命周期也得到了延长。int4refintvalvaldoubleint
我认为还有另一种可能发生的情况,如下:
这里创建了一个具有值类型的临时(纯右值)。但由于需要一个左值并且当前我们有一个纯右值,因此临时物化开始,因此纯右值被转换为xvalue。然后引用绑定到这个具体化的 xvalue(因为 xvalue 也是泛左值) ,而不是直接绑定到变量。发生这种情况是因为右侧变量的类型是,而左侧我们有一个引用。但是为了将引用绑定到变量,类型应该匹配。此外,物化临时 xvalue 的生命周期也延长了。int4const int &refrefvalvaldoubleint
我的问题是:
PS:我并不是在寻找解决这个问题的方法。例如,我知道我可以简单地写:
const double …