代码之家  ›  专栏  ›  技术社区  ›  KansaiRobot

r值参考和正态变量

  •  0
  • KansaiRobot  · 技术社区  · 4 年前

    我正在阅读以下教程: Learn Cpp 他们在那里举了一个使用r值参考的例子。

    #include <iostream>
    
    class Fraction
    {
    private:
        int m_numerator;
        int m_denominator;
    
    public:
        Fraction(int numerator = 0, int denominator = 1) :
            m_numerator{ numerator }, m_denominator{ denominator }
        {
        }
    
        friend std::ostream& operator<<(std::ostream& out, const Fraction &f1)
        {
            out << f1.m_numerator << '/' << f1.m_denominator;
            return out;
        }
    };
    
    int main()
    {
        auto &&rref{ Fraction{ 3, 5 } }; // r-value reference to temporary Fraction
    
    //    auto notref=Fraction(4,8);
        auto notref{Fraction(4,8)};  //<---MY adding 
        // f1 of operator<< binds to the temporary, no copies are created.
        std::cout << rref << '\n';
        std::cout<< notref<<"\n";  //<-- MY adding
    
        return 0;
    } // rref (and the temporary Fraction) goes out of scope here
    

    标记为“我添加”的零件是我为这个问题添加的零件。

    他们写

    作为匿名对象,Fraction(3,5)通常会超出作用域 在定义它的表达式的末尾。然而,由于 使用它初始化r值引用时,其持续时间为 一直延伸到街区的尽头。然后我们可以使用该r值 打印分数值的参考。

    然而,正如你所看到的,我添加了一个正态变量进行比较,它确实如此 完全一样 分数不会超出范围,它可以在打印部分正常使用。

    有什么区别,为什么有人会使用r值引用?

    1 回复  |  直到 4 年前
        1
  •  2
  •   stackoverblown    4 年前

    在这个例子中,rref仅在返回0后才超出作用域。它的生命周期与notref相同。所以没有区别。