c++ - 当 setter 方法参数是 C++ 中的引用时会发生什么?

标签 c++ reference member

我对在 C++ 中何时复制以及何时引用它们感到有点困惑。例如,我有一个非常简单的方法,其中参数是引用:

void setTimeSig(const int &tsNumerator, const int &tsDenominator) {
    this->timeSigNum = tsNumerator;
    this->timeSigDenom = tsDenominator;
}

这是否意味着因为我在 setTimeSig 完成的函数时使用引用,所以具有 timeSigNumtimeSigDenom 的对象将这两个字段是否为空?还是此时正在复制: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/

相关文章:

c++ - 如何解析嵌套数组?

c++ - 将虚函数与重载常规函数混合?

C++ 传递 STL 容器项作为引用

reference - Julia 函数引用参数

c++ - 为什么可以通过使用指向对象成员的指针的 const 成员函数来修改对象状态?

c++ - 创建一个 const shared_ptr<pure virtual class> 成员

c++ - 在 boost::asio 异步模式下创建和接受套接字时可以使用 boost::shared_ptr 吗?

c++ - 精度问题 - 远离原点的观点 - OpenGL C++

c++ - 什么是 __ext_vector_type__ 和 simd?

c++ - 指向成员函数的指针的语法错误