如果引用是类成员,如何初始化对象的引用?

pro*_*cer 3 c++ persistence pointers reference member

假设Class包含一个名为matrix_的引用:

Class.h

class Class
{
Matrix& matrix_;
}
Run Code Online (Sandbox Code Playgroud)

Class.cpp

Class::Class() : matrix_(Matrix())
{
}
Run Code Online (Sandbox Code Playgroud)

我得到错误:从'Matrix'类型的临时类型初始化'Matrix&'类型的非const引用.

我看到问题是临时对象将消失,引用将指向NULL.如何为引用创建持久对象?我想使用引用,因为该成员应该是常量.

Kos*_*Kos 5

Class::Class() : matrix_(Matrix()) 尝试将引用设置为指向临时对象,这是非法的.

好吧,有一个const引用和临时绑定的情况,但严重的是,不要去那里.

看起来你只需要使用聚合:

class Class
{
const Matrix matrix_;
};
Run Code Online (Sandbox Code Playgroud)

和初始化列表:

Class::Class() : matrix_() /* or any params to the constructor if you need them */
{
}
Run Code Online (Sandbox Code Playgroud)