相关疑难解决方法(0)

什么是复制和交换习语?

这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?

虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:

c++ c++-faq copy-constructor assignment-operator copy-and-swap

1907
推荐指数
5
解决办法
34万
查看次数

一种在C ++中交换两个引用的方法

这确实是交换两个引用的一个坏主意。这些引用不应重设,因此不可能。我知道的那么多。

我想要做的,就是交换两个引用,在某种程度上人们会交换两个指针:地址被交换,但没有数据。假设:

int a = 0, b = 1;
int *pA = &a, *pB = &b;
std::swap(pA, pB);
Run Code Online (Sandbox Code Playgroud)

现在* pA为1,* pB为0,但是a仍然为0,b仍然为1。但是,对于引用,这是不可能的:

int a = 0, b = 1;
int &rA = a, &rB = b;
std::swap(pA, pB);
Run Code Online (Sandbox Code Playgroud)

现在,引用被交换了,但是原始值也被交换了。我唯一能想到的是:

template <class _Ty>
struct resetable_ref {
    _Ty &ref;

    inline resetable_ref(resetable_ref &r)
        :ref(r.ref)
    {}

    inline resetable_ref(_Ty &_ref)
        :ref(_ref)
    {}

    inline resetable_ref &operator =(resetable_ref &r)
    {
        if(sizeof(resetable_ref) == sizeof(void*)) // compile-time constant (true)
            *reinterpret_cast<void**>(this) = *reinterpret_cast<void**>(&r);
        else
            memcpy(this, &r, sizeof(resetable_ref)); …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

5
推荐指数
1
解决办法
7123
查看次数