关于什么时候被复制以及什么时候用C++引用,我有点困惑.例如,我有这个非常简单的方法,其中参数是引用:
void setTimeSig(const int &tsNumerator, const int &tsDenominator) {
this->timeSigNum = tsNumerator;
this->timeSigDenom = tsDenominator;
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着因为我在函数where setTimeSig完成时使用引用,带有timeSigNum和的对象timeSigDenom会将这两个字段清空?或者是在此时复制:this->timeSigNum = tsNumerator;
还有一个关于同一件事的问题:
class A{
public:
B bObject;
}
B b;
A a;
a.bObject = b;
Run Code Online (Sandbox Code Playgroud)
难道bObject现在引用到B或它包含一个副本?
任何有关我应该阅读的内容或内容的信息都非常感谢.我仍然困惑很多事情.
引用可以被认为是隐式指针.虽然在语义上它们可以具有更复杂的含义(即,引用通常被认为是"绑定",并且不能NULL),但是底层编译器通常将它们视为自动解引用的指针.因此,从编译器的角度来看,您的代码实际上如下所示:
this->timeSigNum = *tsNumerator;
this->timeSigDenom = *tsDenominator;
Run Code Online (Sandbox Code Playgroud)
因此,不会复制引用本身的值,而是复制引用绑定到的原始变量的值,就像手动取消引用显式指针一样.