提问人:quant 提问时间:12/23/2022 最后编辑:Remy Lebeauquant 更新时间:12/23/2022 访问量:83
& 在 c++ 模板中的作用是什么?
What is the effect of & in c++ templates?
问:
template <typename T>
const T& longestOfTheThree(const T& a, const T& b, const T& c){
T longest = a;
if (longest.length < b.length){longest = b;}
if (longest.length < c.length){longest = c;}
return longest;
}
有人可以解释为什么(特别是之前)是无效的吗?为什么代码只有在我删除 ?const T&
&
longestOfTheThree
&
此代码编译:
template <typename T>
const T longestOfTheThree(const T& a, const T& b, const T& c){
T longest = a;
if (longest.length < b.length){longest = b;}
if (longest.length < c.length){longest = c;}
return longest;
}
答:
0赞
lorro
12/23/2022
#1
您正在返回对 ASDV(“堆栈”变量)的引用。那行不通:在返回之前被销毁。longest
如果要返回引用,可以执行以下操作:
template <typename T>
const T& longestOfTheThree(const T& a, const T& b, const T& c){
if (a.length < b.length) {
if (b.length < c.length) { return c; }
return b;
} else /* !(a.length < b.length) */ {
if (a.length < c.length) { return c; }
return a;
}
}
或者,如果你想保留 ,你可以有一个指针:longest
template <typename T>
const T& longestOfTheThree(const T& a, const T& b, const T& c){
const T* longest = &a;
if (longest->length < b.length) { longest = &b; }
if (longest->length < c.length) { longest = &c; }
return *longest;
}
评论
1赞
UKMonkey
12/23/2022
你的第一个例子并没有真正起作用。“最长”不是第一定义的,第二是“a”永远不会被比较(第三,如果 c > b >最长,它只会返回 b,而不是 c)
0赞
lorro
12/23/2022
@UKMonkey 确实,固定了,谢谢。
0赞
HolyBlackCat
12/23/2022
代表什么?ASDV
0赞
lorro
12/23/2022
@HolyBlackCat 自动存储持续时间变量。许多人将它们称为“堆栈”变量,但堆栈不是标准的一部分。
0赞
HolyBlackCat
12/23/2022
嗯,以前从未见过这个缩写。
评论
const
const
longest