无法将参数从'int'转换为'int&'

Gar*_*ghi 15 c++ visual-studio-2010

我正在关注复数C++课程,其中包含以下代码:

#include <iostream>

template <class T>
T max(T& t1, T& t2)
{
    return t1 < t2 ? t2 : t1;
}

int main()
{
    std::cout << "Max of 33 and 44 is " << max(33, 44) << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我键入了这段代码,但与课程代码不同,我收到一条错误消息:

C2664: 'max' : cannot convert parameter 1 from 'int' to 'int &'
Run Code Online (Sandbox Code Playgroud)

本课程中的代码是用Visual Studio Express 2010编写的,而我的代码是用Visual Studio Ultimate 2010编写的.


编辑

感谢所有人(甚至是凯特格雷戈里本人)提供答案并清理所有内容.

小智 32

因为文字(和一般的rvalues)不能通过非const引用传递(因为如果被调用者可以改变它们就没有意义).通过值传递或通过const引用:

template <class T>
T max(const T& t1, const T& t2)
{
    return t1 < t2 ? t2 : t1;
}
Run Code Online (Sandbox Code Playgroud)

要么

template <class T>
T max(T t1, T t2)
{
    return t1 < t2 ? t2 : t1;
}
Run Code Online (Sandbox Code Playgroud)