这是参考重新分配的一个例子吗? C ++ 11

时间:2014-11-08 15:45:44

标签: c++11 reference

据我了解,一旦初始化了参考变量,就不能改变它。例如,请参阅this question。然而,这是一个最小的工作示例,它确实重新分配它。我有什么误会?为什么示例打印42和43?

#include <iostream>

class T {
    int x;
public:
    T(int xx) : x(xx) {}

    friend std::ostream &operator<<(std::ostream &dst, T &t) {
        dst << t.x;

        return dst;
    }
};

int main() {
    auto t = T(42);
    auto q = T(43);
    auto &ref = t;
    std::cerr << ref << std::endl;
    ref = q;
    std::cerr << ref << std::endl;
    return 0;
}

2 个答案:

答案 0 :(得分:4)

你这里没有改变参考。

您正在替换引用所引用的对象。

换句话说:在作业完成后,t将替换为q

ref仍然是对t的引用。

答案 1 :(得分:3)

不执行引用重新分配。相反,它将变量q中的对象分配ref引用的对象中(在您的示例中为t)。

这也证明了为什么输出42作为输出:默认的复制赋值运算符修改了第一个对象。