C ++通过引用将`this`传入方法

我有一个类构造函数,期望引用另一个类对象作为参数传入。 我明白,当没有指针算术执行或空值不存在时,引用优于指针。

这是构造函数的头声明:

class MixerLine {

private:
    MIXERLINE _mixerLine;

public:

    MixerLine(const MixerDevice& const parentMixer, DWORD destinationIndex); 

    ~MixerLine();
}

这是调用构造函数(MixerDevice.cpp)的代码:

void MixerDevice::enumerateLines() {

    DWORD numLines = getDestinationCount();
    for(DWORD i=0;i<numLines;i++) {

        MixerLine mixerLine( this, i );
        // other code here removed
    }
}

编译MixerDevice.cpp失败并出现此错误:

错误3错误C2664:'MixerLine :: MixerLine(const MixerDevice&,DWORD)':无法将参数1从'MixerDevice * const'转换为'const MixerDevice&'

但我认为指针值可以分配给指针,例如

Foo* foo = new Foo();
Foo& bar = foo;

this是一个指针,要得到一个引用,你必须解除引用( *this )它:

MixerLine mixerLine( *this, i );

你应该解除this引用,因为this是一个指针,而不是引用。 要更正你的代码,你应该写

for(DWORD i=0;i<numLines;i++) {

    MixerLine mixerLine( *this, i ); // Ok, this dereferenced
    // other code here removed
}

注意:构造函数的参数const MixerDevice& const parentMixer的第二个const是完全无用的。


为了从指针获取引用,需要取消引用指针,如前所述。 另外(可能由于复制到问题?)构造函数不应该编译:

const MixerDevice& const parentMixer

这不是一个合适的类型,引用不能是const限定的,只有引用的类型可以,所以两个(完全相同的)选项是:

const MixerDevice& parentMixer
MixerDevice const& parentMixer

(注意, MixerDeviceconst限定可以以任何方式完成,而且意思完全相同)。

链接地址: http://www.djcxy.com/p/20783.html

上一篇: C++ Passing `this` into method by reference

下一篇: Why 'this' is a pointer and not a reference?