模板函数c ++无效初始化类型的非const引用

时间:2016-11-16 08:03:34

标签: c++ function-templates

在我的FTemplate.h中,

#ifndef FTemplate_h
#define FTemplate_h_h

template<typename T>
T& minus(const T& type1, const T& type2)
{
    return type1 - type2; // error here
}


#endif

在我的主要cpp

#include <FTemplate.h>
#include <Calculate.h>  
int main()
{
   Calculate cal;   
   Calculate cal1(42, 22);
   Calculate cal2(95, 48);
   cal difference = minus(cal1,cal2);

}

我正在尝试使用函数模板进行简单的计算,但我遇到了这个错误:invalid initialization of non-const reference of type ‘Calculate &’ from an rvalue of type ‘Calculate ’我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

您将返回对{/ 1}}在

中创建的临时对象的引用
div

仅按return type1 - type2 ;按值返回。

T& minus(const T& type1, const T& type2) ~~~ 导致rvalue无法绑定到非const lvalue引用。

答案 1 :(得分:0)

您将通过引用返回结果type1-type2。这意味着您将引用超出范围的临时对象(技术上为Calculate&&)。请尝试按值返回,即T&T