更改此指针指向的值

Change value pointed by this pointer

本文关键字:指针      更新时间:2023-10-16

我为我的矩阵结构编写了这段代码。它计算提高到 e 次方的方阵的值,但这无关紧要。我想知道最后几行发生了什么。

p 的值是否被复制到指向的位置?是浅拷贝还是深拷贝?是否正在改变?我不这么认为,因为它是常量。

如何实现该副本以使其运行得更快?

matrix& operator ^=(int e)
{
    matrix& b = *this;
    matrix p = identity(order());
    while (e) {
        if (e & 1)
            p *= b;
        e >>= 1;
        b *= b;
    }
    *this = p;
    return *this;
}

如果向类添加了适当的缓冲区窃取支持,则以下方法之一将使其更快:

取代

*this = p;

通过任一项(在C++11中首选(

*this = std::move(p);

或(对于 C++03,在 C++11 中应该仍然可以正常工作(

swap(p); // if swap is a member
swap(*this, p); // if it's not

但是,由于您无法就地覆盖左侧,因此最好是实现operator^,并据此编写operator^=

matrix operator^(const matrix& b, int e)
{
    matrix p = identity(b.order()); // move or elision activated automatically
    while (e) {
        if (e & 1)
            p *= b;
        e >>= 1;
        b *= b;
    }
    return p; // move or NRVO activated automatically
}
matrix& operator^=(int e)
{
    *this = (*this) ^ e; // move activated automatically since RHS is temporary
    // ((*this) ^ e).swap(*this); in C++03
    return *this;
}

刚刚注意到您正在用连续的正方形覆盖*this

*this = p;调用

矩阵的operator=(matrix)方法(如果有的话(,否则它会调用编译器生成的operator=(),该简单地将p的字段逐个成员复制到this的字段中(使用它们各自的operator=()实现(。