【发布时间】:2011-09-14 07:54:27
【问题描述】:
我假设这是不可能的,因为我收到以下错误:
error C3533: 'auto': a parameter cannot have a type that contains 'auto'
这是重现错误的代码 sn-p:
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 的类型是由编译器无法推断出的右值 确定的,尽管它是在int 的已知向量上执行的算法的谓词?
有人知道原因吗?
【问题讨论】:
-
Herb Sutter 最近在第 9 频道谈到了这个问题。channel9.msdn.com/Shows/Going+Deep/…
-
如果我能在没有缓冲的情况下超过 4 秒,那可能会非常有趣。
-
下载链接在右边。