目的: STL を深く理解する
最近、非常に基本的な文法を見ましたが、これも一般の人がよく使う一時オブジェクトで、名前のないオブジェクトの一種です (値渡し操作ではコピー操作が発生するため、フォーム一時オブジェクト)、Liezi、shape(2,3)、または int(8) の両方が一時オブジェクトを生成することがわかります。これはコンストラクターを呼び出すことと同じであり、次の例で確認できます。オブジェクト myprint() の場合、これは関数ではなく一時オブジェクトです。関数のパラメータに使用できます。以下のようにfor_eachにパラメータを渡すために入れます。
#include<vector>
#include<algorithm>
#include<iostream>
template <typename T>
class myprint
{
public:
void operator()(const T& elem)
{
std::cout << elem <<' ';}
};
int main()
{
int ia[6] = {
0,1,2,3,4,5};
std::vector<int> iv(ia, ia+6);
std::for_each(iv.begin(), iv.end(), myprint<int>());
std::cout<<std::endl;
}
操作の結果、iv のパラメータに渡された myprint() が表示され、コピーが発生しました。
詳細については、Hou Jie 氏が翻訳した STL ソースコード解析本を参照してください。