小编kel*_*viN的帖子

在模板函数中调用std :: for_each时结果错误

测试代码:

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 itypename 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)

c++ templates c++11 clang++

24
推荐指数
1
解决办法
435
查看次数

"new"和直接调用生成器函数之间有什么区别?

我知道"新"和直接调用普通函数之间的区别.

但是发电机功能如何呢?

例如:

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)

看来他们是一样的?

javascript generator ecmascript-harmony

7
推荐指数
1
解决办法
186
查看次数