我正在阅读以下教程:
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值引用?