我对在 C++ 中何时复制以及何时引用它们感到有点困惑。例如,我有一个非常简单的方法,其中参数是引用:
void setTimeSig(const int &tsNumerator, const int &tsDenominator) {
this->timeSigNum = tsNumerator;
this->timeSigDenom = tsDenominator;
}
这是否意味着因为我在 setTimeSig
完成的函数时使用引用,所以具有 timeSigNum
和 timeSigDenom
的对象将这两个字段是否为空?还是此时正在复制:this->timeSigNum = tsNumerator;
还有一个关于同一件事的问题:
class A{
public:
B bObject;
}
B b;
A a;
a.bObject = b;
bObject
现在引用 b 还是包含一个拷贝?
非常感谢任何关于我应该在哪里阅读或阅读什么的信息。我仍然对很多事情感到困惑。
最佳答案
引用可以被认为是隐式指针。虽然在语义上它们可能具有更复杂的含义(即,引用通常被认为是“绑定(bind)的”,并且不能为 NULL
),但底层编译器通常将它们视为自动取消引用的指针.因此,从编译器的角度来看,您的代码实际上如下所示:
this->timeSigNum = *tsNumerator;
this->timeSigDenom = *tsDenominator;
因此引用本身的值并没有被复制,而是引用绑定(bind)到的原始变量的值被复制,就像您手动取消引用显式指针一样。
关于c++ - 当 setter 方法参数是 C++ 中的引用时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670911/