我认为这是不可能的,因为我收到了以下错误消息:
以下是一个代码片段,可以重现错误:
现在,如果您写的是以下内容,一切都没问题,它将删除值为3的元素:
error C3533: 'auto': a parameter cannot have a type that contains 'auto'
以下是一个代码片段,可以重现错误:
int myInts[] = {1,2,3,3,3,4};
std::vector<int> myVec(myInts, myInts + sizeof(myInts)/sizeof(int));
myVec.erase(
std::remove_if(myVec.begin(), myVec.end(),
[](auto i){return i==3;}), // lambda param error
myVec.end());
现在,如果您写的是以下内容,一切都没问题,它将删除值为3的元素:
int myInts[] = {1,2,3,3,3,4};
std::vector<int> myVec(myInts, myInts + sizeof(myInts)/sizeof(int));
myVec.erase(
std::remove_if(myVec.begin(), myVec.end(),
[](int i){return i==3;}),
myVec.end());
那么,像错误提示中建议的那样,您是否不能将auto
用作函数参数?
这是因为auto
的类型由编译器无法推断的rvalue决定,尽管它是在已知int
向量上执行的算法的谓词?
有人知道原因吗?
auto
。 - Roi Danton