我想知道何时应该在auto
上使用template
,反之亦然。我进行了一些小测试,结果却相同。
在templates
上使用auto
有专业的经验吗?
它对内存或处理器有帮助吗?
将templates
用于函数和类,将auto
用于变量是更好的做法吗?
编辑:在问这个问题之前,我所做的测试是我创建了两个函数。目的是要给出更大的论据。一个使用模板
template<class T>
T bigger( T a, T b ){
if (a > b) {
return a;
} else {
return b;
}
};
其他我做的完全一样,只是开头是
auto Bigger(auto a, auto b).
我输入了完全相同的变量( int a = 25, int b = 30, float y = 26 , float z = 105, std::string me = “Bradley”), std::string food = “Pizza”
,并且两个函数都得到了完全相同的结果。
如果这有很大的不同,我在Linux上。
我希望这可以澄清我的问题。
(我即时重写了代码,因此,如果有错误或其他原因,不是因为这个原因。一切都可以在我的一端正确编译。)
感谢您提供的任何帮助。
答案 0 :(得分:1)
通过自动使用模板是否有优势?
这不是一个好问题,因为它试图比较“苹果和橘子”。首先要注意以下事实:auto
不能用于引用 specific 类型名。 它不是命名 。因此,它不能用来省略函数参数的实际类型。而且,根据定义,specialization代码(使用模板可能无法完成)无法编写。
它对内存或处理器有帮助吗?
与其他任何东西相比,它更依赖于编译器的实现。
使用针对函数和类的模板是否更好 和变量的自动设置?
最佳实践是根据相关方面,从每种情况中寻找正确的选择,从您希望实现的目标开始?同样,这是两个不同的工具。
答案 1 :(得分:0)
另外,auto
和template
不能在相同的上下文中使用,
之间的区别
auto Bigger = [](auto lhs, auto rhs) { return lhs < rhs ? rhs : lhs; }
template <typename T>
T bigger(T lhs, T rhs)
是前者中的lhs
和rhs
可能具有不同的类型。
它基本上等同于:
template <typename T1, typename T2>
auto Bigger(T1 lhs, T2 rhs) { return lhs < rhs ? rhs : lhs; }
由于无法推论bigger(4.2f, 42)
(可能是T
或float
,因此呼叫int
失败了)
而Bigger(4.2f, 42)
很好。