What is the advantage of && in this code?

In the following code, what is the advantage of using &&? Code from the answer for Specialize the same operator for different properties

From this question, I understand that an argument &&means that it is a link that can be changed by a function.

decay_tprobably does not allow the compiler to interpret the reference to the variable as an array, as in What is std :: decay and when should it be used?

std::forward- perfect forwarding as described here . Why do we need this shipment?

Thank.

#include <iostream>
#include <type_traits>
#include<utility>

class A;

template <typename T>
struct is_A : std::false_type {};
template <> struct is_A<A> : std::true_type {};

template <typename T>
struct is_int : std::false_type {};
template <> struct is_int<int> : std::true_type {};
template <> struct is_int<long> : std::true_type {};

class A{
public:
    int val;

    void print(void){
        std::cout << val << std::endl;
    }

    template <typename T1>
    std::enable_if_t<is_int<std::decay_t<T1>>::value, void>
    operator=(T1 && input){
        val = 2*std::forward<T1>(input);
    }

    template <typename T1>
    std::enable_if_t<is_A<std::decay_t<T1>>::value,void>
    operator=(T1 && Bb){
        val = 5*std::forward<T1>(Bb).val;
    }
};

int main(void){
    A Aa;
    A Bb;
    int in_a = 3;
    Aa = in_a;
    Bb = Aa;
    Aa.print(); //This should give 6. (3x2)
    Bb.print(); //This should give 30. (6x5)
}
+4
source share
1 answer

, () , .
, , :

X:: operator = - X X, X &, const X &, & Const volatileX &.

:

, .

:

Bb = static_cast<const A&>(Aa);

.

, lvalue/rvalue, CV, , , , .
. .

@Jarod42:

, operator=(const A&), , .

. , .
,

[...] .: -)

, ?
, . , , .

+2

Source: https://habr.com/ru/post/1654822/


All Articles