VS 2010 c++11のサポート状況検証
4798 ワード
現在は、テスト作業で使用されているものが多いだけです.
shared_ptr
----サポート!make_もサポートshared weak_ptr---サポート、結局これはshared_ptrアシストポインタテンプレート unique_prt----支持!make_はサポートされていませんunique、これも普通です.結局、これはC++14の文法です.
総合的に見ると、VS 2010に独自のスマートポインタを使うことができます.
------サポート!
Constructs a closure: an unnamed function object capable of capturing variables in scope.
c++11には、次の3つの構文があります.
[ captures ] ( params ) -> ret_type { body } (1) [ captures ] ( params ) { body } (2) [ captures ] { body } (3)
理論的には最初の文法の簡略化版であり、必要に応じて使用されます.
閉パッケージはコンテキスト付きの関数です.はっきり言って、状態の関数があります
関数はコードであり,状態は変数のセットであり,コードと変数のセットをバンドル(bind)すると閉パケットを形成する.
C++で閉パッケージを実現する3つの方式リロードoperator() 閉パケットは関数+状態であるため、この状態は隠されたthisポインタによって伝達される.したがって、閉パケットは必ず関数オブジェクトである.メンバー変数は状態を保存するのに非常に良いツールであるため、operator()演算子の再ロードを実現し、このクラスのオブジェクトを閉パッケージとして使用することができる.デフォルトで入力thisポインタは、メンバー変数にアクセスする方法を提供します.(実際、lambdaとbindの原理はすべてこれです.) lambda式
C++11の中のlambdaは閉パッケージの実現である. boost::bind/std::bind
closureのステータスは、特に実行されるコンテキストを指します.closureは、実行時に必要なコンテキストを格納し、closureの作成時のコンテキストがclosureの実行時に依然として有効であることを保証します.
例えばroundはclosureのコンテキストです.コンテキストを保存するこの特徴は、通常、「capture」または「bind」と呼ばれる.Captureは自分で書くことができます.例えばMyFuctorf(round);boost::bindも使えます.
vs 2010テスト:
------サポート!
匿名表現をサポートすることは、閉パッケージのサポートを意味し、C++では、閉パッケージはそれほど有名ではありません.結局、この概念はフロントエンドJSが作ったものです.しかしlambda式ははっきりしていて、コードを簡素化することができて、後で学習記録を補充する計画があります.まずここを参考にしてもいいです.
Possible implementation
すべての要素をループし、f関数を使用してすべての要素(反復器)を処理します.
テストfor_eachのlambda式
------サポート!
コンパイルエラー.
----サポートしていません!
テスト:
------サポート!
The function template bind generates a forwarding call wrapper for f. Calling this wrapper is equivalent to invoking f with some of its arguments bound to args.
----関数テンプレートはfにバインドされて転送呼び出しパッケージを生成する.このパッケージを呼び出すのは、fを呼び出し、argsにいくつかのパラメータをバインドすることに等しい.(機械翻訳は感動的)
個人的にはbind関数テンプレートは、ネストされたバインドサブエクスプレッション関数、バインドクラスメンバー関数、さらにはクラスのメンバー変数など、いくつかの関数をより広い範囲で使用することができます.
検証コード:
------サポート!
実行可能な変更:
転載先:https://www.cnblogs.com/Stultz-Lee/p/10036207.html
インテリジェントポインタ
#include
std::shared_ptra(new A);
----サポート!make_もサポートshared
総合的に見ると、VS 2010に独自のスマートポインタを使うことができます.
autoタイプ自己導出
vector v_ints;
v_ints.push_back(1);
v_ints.push_back(2);
auto it = v_ints.cbegin();
std::cout << *it <<:endl auto="" a="make_shared<A">();
auto b = a;
------サポート!
Lambda式
Constructs a closure: an unnamed function object capable of capturing variables in scope.
c++11には、次の3つの構文があります.
[ captures ] ( params ) -> ret_type { body } (1) [ captures ] ( params ) { body } (2) [ captures ] { body } (3)
理論的には最初の文法の簡略化版であり、必要に応じて使用されます.
閉パッケージはコンテキスト付きの関数です.はっきり言って、状態の関数があります
関数はコードであり,状態は変数のセットであり,コードと変数のセットをバンドル(bind)すると閉パケットを形成する.
C++で閉パッケージを実現する3つの方式
class MyFunctor
{
public:
MyFunctor(float f) : round(f) {}
int operator()(float f) { return f + round; }
private:
float round;
};
float round = 0.5;
MyFunctor f(round);
float round = 0.5;
auto f = [=](float f) { return f + round; }
C++11の中のlambdaは閉パッケージの実現である.
int boost_func(float f, float round)
{ return f + round; }
float round = 0.5;
boost::function f = boost::bind(boost_func, _1, round);
closureのステータスは、特に実行されるコンテキストを指します.closureは、実行時に必要なコンテキストを格納し、closureの作成時のコンテキストがclosureの実行時に依然として有効であることを保証します.
例えばroundはclosureのコンテキストです.コンテキストを保存するこの特徴は、通常、「capture」または「bind」と呼ばれる.Captureは自分で書くことができます.例えばMyFuctorf(round);boost::bindも使えます.
vs 2010テスト:
int make_i = 3;
auto f = [=](int x){
std::cout << x << make_i << '
';
};// ;
f(make_i);
------サポート!
匿名表現をサポートすることは、閉パッケージのサポートを意味し、C++では、閉パッケージはそれほど有名ではありません.結局、この概念はフロントエンドJSが作ったものです.しかしlambda式ははっきりしていて、コードを簡素化することができて、後で学習記録を補充する計画があります.まずここを参考にしてもいいです.
for_each
Possible implementation
template
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
for (; first != last; ++first) {
f(*first);
}
return f;
}
すべての要素をループし、f関数を使用してすべての要素(反復器)を処理します.
テストfor_eachのlambda式
#include
for_each(v_ints.begin(),v_ints.end(),[](int val){
cout << val << endl;
});
------サポート!
Range-based for loop
vector v_ints;
v_ints.push_back(1);
v_ints.push_back(2);
for (const int& i : v_ints) // access by const reference
std::cout << i << ' ';
std::cout << '
';
コンパイルエラー.
----サポートしていません!
正規表現
テスト:
std::string fnamesstring[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"};
vector fnames(fnamesstring,fnamesstring+4);
std::regex txt_regex("[a-z]+\\.txt");
for_each(fnames.begin(),fnames.end(),[&](const string &fname){
std::cout << fname << ": " << std::regex_match(fname, txt_regex) << '
';
} );
------サポート!
bind関数テンプレート
The function template bind generates a forwarding call wrapper for f. Calling this wrapper is equivalent to invoking f with some of its arguments bound to args.
----関数テンプレートはfにバインドされて転送呼び出しパッケージを生成する.このパッケージを呼び出すのは、fを呼び出し、argsにいくつかのパラメータをバインドすることに等しい.(機械翻訳は感動的)
個人的にはbind関数テンプレートは、ネストされたバインドサブエクスプレッション関数、バインドクラスメンバー関数、さらにはクラスのメンバー変数など、いくつかの関数をより広い範囲で使用することができます.
検証コード:
#include
void f(int n1 ,int n2,int n3 ,int n4 ,int n5){
cout << n1 <
------サポート!
その他
vector v_ints = {1,2,3,4,5,6,2,4,3};
vs 2010ではこのような初期化はサポートされていません実行可能な変更:
int ints[] = {1,2,3,4,5,6,2,4,3};
vector v_ints(ints,ints+9);
転載先:https://www.cnblogs.com/Stultz-Lee/p/10036207.html