我假设这是不可能的,因为我收到以下错误:
error C3533: 'auto': a parameter cannot have a type that contains 'auto'
int myInts[] = {1,2,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,[](int i){return i==3;}),myVec.end());
那么你可以简单地不使用auto作为函数参数,因为错误暗示了吗?
这是因为auto的类型是由rvalue决定的,尽管它是在已知的int向量上执行的算法的谓词,但编译器无法推导出它.
有谁知道原因?