【发布时间】:2018-09-28 15:52:19
【问题描述】:
我遇到了一段我没有遵循的代码。考虑以下两种方法。
template <typename T>
auto FindElementV1(std::vector<T> elementList, const T& element) {
return std::find(elementList.begin(), elementList.end(), element);
}
template <typename T>
auto FindElementV2(std::vector<T> elementList, const T& element) -> typename decltype(elementList)::iterator {
return std::find(elementList.begin(), elementList.end(), element);
}
我可以理解FindElementV2 工作,因为该方法的返回类型是使用decltype 指定的。但是为什么FindElementV1 在没有指定返回类型的情况下工作? V1 是符合标准的代码吗?
以下是完整的工作示例。符合 gcc 6.3
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template <typename T>
auto FindElementV1(std::vector<T> elementList, const T& element) {
return std::find(elementList.begin(), elementList.end(), element);
}
int main() {
std::vector<int> vec = {1,4,2,4,3,5,3,5,3,6};
auto it = FindElementV1(vec, 5); //< Why does this work without a return type in the method?
cout<<*it<<endl;
}
【问题讨论】:
标签: c++ templates iterator c++14 auto