测试代码:
template<typename T>
void test() {
T container { 1, 2, 3 };
std::for_each(container.begin(), container.end(), [](int v) {
cout<<"1st for_each"<<endl;
});
cout<<"xxxxxx"<<endl;
std::for_each(container.begin(), container.end(), [](typename T::value_type v) {
cout<<"2nd for_each"<<endl;
});
}
int main() {
test<vector<int>>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在不同的lambda中使用int i和typename T::value_type vparam类型.
编译cmd:clang++ -std=c++11 -stdlib=libc++ test.cpp -o test
clang 3.1版(branches/release_31)目标:i386-pc-linux-gnu线程模型:posix
结果:
2nd for_each
2nd for_each
2nd for_each
xxxxxx
2nd for_each
2nd for_each
2nd for_each
Run Code Online (Sandbox Code Playgroud)
问题是:为什么要先for_each打印出"2nd for_each"?
编辑:这可能是一个clang ++ bug.
@KennyTM提供了类似的简单代码:
#include <iostream> …Run Code Online (Sandbox Code Playgroud) 我知道"新"和直接调用普通函数之间的区别.
但是发电机功能如何呢?
例如:
function *counter(){
let n = 0;
while (n < 2) {
yield n++;
}
return 10;
}
var countIter1 = new counter();
var countIter2 = counter();
Run Code Online (Sandbox Code Playgroud)
看来他们是一样的?