关键字自动和模板

时间:2018-08-23 04:39:33

标签: c++

我想知道何时应该在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上。 我希望这可以澄清我的问题。

(我即时重写了代码,因此,如果有错误或其他原因,不是因为这个原因。一切都可以在我的一端正确编译。)

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

  

通过自动使用模板是否有优势?

这不是一个好问题,因为它试图比较“苹果和橘子”。首先要注意以下事实:auto不能用于引用 specific 类型名。 它不是命名 。因此,它不能用来省略函数参数的实际类型。而且,根据定义,specialization代码(使用模板可能无法完成)无法编写。

  

它对内存或处理器有帮助吗?

与其他任何东西相比,它更依赖于编译器的实现。

  

使用针对函数和类的模板是否更好   和变量的自动设置?

最佳实践是根据相关方面,从每种情况中寻找正确的选择,从您希望实现的目标开始?同样,这是两个不同的工具。

答案 1 :(得分:0)

另外,autotemplate不能在相同的上下文中使用,

之间的区别

auto Bigger = [](auto lhs, auto rhs) { return lhs < rhs ? rhs : lhs; }

template <typename T>
T bigger(T lhs, T rhs)

是前者中的lhsrhs可能具有不同的类型。 它基本上等同于:

template <typename T1, typename T2>
auto Bigger(T1 lhs, T2 rhs) { return lhs < rhs ? rhs : lhs; }

由于无法推论bigger(4.2f, 42)(可能是Tfloat,因此呼叫int失败了) 而Bigger(4.2f, 42)很好。