我正在学习 C++ 的在线课程 (Pluralsight.com) 并努力练习模板,特别是将实际数字(例如3
)传递给期望(T& t)
.
讲师编写的代码不会在我的 PC 上编译 - 我相信我理解它为什么无法编译,但想知道它是如何为讲师编译的(谁演示了它)以及您应该如何处理这种情况。
#include "stdafx.h"
#include <iostream>
template <class T>
T myMax(T& t1, T& t2)
{
return t1 < t2 ? t2 : t1;
}
int main()
{
int result = myMax(3, 4);
return result;
}
编辑:修正了代码中的错字(来自我在提问之前的实验)。它似乎在https://ideone.com/1cjJUD中运行,所以我现在不确定为什么它不会为我编译!(感谢@user4581301)
EDIT2回答后,更改函数名称以避免混淆。应该让任何偶然发现同一件事的人更清楚地提出问题。https://ideone.com/dZffn6
编译器错误"C2664 'T max<int>(T &,T &)': cannot convert argument 1 from 'int' to 'int &"
在我看来它失败了,因为3
实际数字不是对存储在某处的数字的引用。声明int a=3;
并传递a
给我的 max 函数可以正常工作。
- 我对编译失败的原因是否正确?
- 讲师代码如何编译不出错?这在最近的 C++ 版本中是否发生了变化(我相信该类使用 C++03)?
- 是否可以编写一个可以通过 ByRef 或 ByVal 的模板?我最终会得到 4 个案例(a,b)吗?(a&, b); (a, b&); (a&, b&) ?