#include <iostream>
#include <string>
using namespace std;
template <typename Type>
const Type& GetMax(Type& value1,Type& value2)
{
if(value1 > value2)
return value1;
else
return value2;
}
template<typename Type>
void DisplayComparison(const Type& value1,const Type& value2)
{
cout<<"GetMax("<<value1<<","<<value2<<") = ";
cout<<GetMax(value1,value2)<<endl;
}
int main()
{
int Int1 = -102, Int2 = 2001;
DisplayComparison(Int1,Int2);
double d1 = 3.14,d2 = 3.1416;
DisplayComparison(d1,d2);
string Name1("Jack"),Name2("John");
DisplayComparison(Name1,Name2);
return 0;
}
const Type& GetMax
... const
是否必要?如果是,为什么?
如果我这样写 - &gt; const Type& GetMax(const Type& value1,const Type& value)
这两个const
正在做什么? :(
答案 0 :(得分:0)
我将提出一些关于const的观点,以便明确何时以及可以根据需要使用哪些内容:
案例1:let zipArch = SSZipArchive(path: zippedDir.path)
print(zipArch.open)
print(zipArch.write(dataStr.data(using: String.Encoding.utf8)!, filename: "blah.txt", withPassword: ""))
print(zipArch.close)
这里value1是本地副本,我可以想到几点
我可以想到几个原因:
1)当有人阅读代码并查看GetMax(const Type value1)
时,他们知道不应在函数体中修改const Type value1
。
2)当您尝试修改函数体中的value1
时,编译器会告诉您。因此,添加value1
可以防止错误。
3)然而,C ++ 11还有另一个不同之处。当移动操作修改对象时,无法移动常量对象。因此,您只能在函数体中复制const
,并且不能从中移动。
4)另外,如果这是一个类类型,则不能在const对象上调用非const成员函数。
案例2:value1
我们不知道GetMax(const Type& value1)
如何在函数外部使用,因此我们希望保护它不被修改。
案例3:value1
在功能之前讨论const Type& GetMax()
,意味着它会返回const
对const
的引用(此处为Type
)
举个例子:
GetMax
所以,总而言之,你不需要使用&#34; Class xyz;
Type& t = xyz.GetMax() //This is INCORRECT
const Type& tc = xyz.GetMax() //This is OKAY!
除非您有上述要求,但在某些情况下这样做可能是一种好习惯。