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

时间:2012-06-23 14:50:29

标签: c++ reference pass-by-reference

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

这是构造函数的头声明:

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&amp;,DWORD)':无法将参数1从'MixerDevice * const'转换为'const MixerDevice&amp;'

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

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

4 个答案:

答案 0 :(得分:8)

this是一个指针,要获取引用,您必须取消引用它(*this):

MixerLine mixerLine( *this, i );

答案 1 :(得分:2)

您应取消引用this,因为this是指针,而不是引用。要更正您的代码,您应该写

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

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

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

答案 2 :(得分:1)

要从指针获取引用,您需要取消引用指针,就像已经提到的那样。另外(可能是由于复制到问题中?)构造函数不应该编译:

const MixerDevice& const parentMixer

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

const MixerDevice& parentMixer
MixerDevice const& parentMixer

(请注意,const的{​​{1}}资格可以通过任何一种方式完成,而且意味着完全相同。

答案 3 :(得分:0)

指针值可以指定给指针,但不能指定给引用! 1

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

<小时/> <子> 1。好吧,它们可以用来初始化引用指针,但这不是你在这里所拥有的......