C++0 x/11学習ノート


今日マイクロソフトが提供したwindows 8の関連開発文書とSampleプログラムを見て、C++プログラムの表現方式が完全に天書に似ていることを発見しました.調べてみると、C++0 x/11が新しくサポートしたLambda表現式で、もともとC++0 x/11の説明を読むのがおっくうで、後で研究したいと思っていましたが、今日はこの機会に少しブラウズして、以下のような新しい特性を整理しました.皆さんと分かち合いましょう.
少し突っ込むと、C++0 x/11はC++03に続いて通過した最新のC++標準ライブラリで、C++文法特性と開発ライブラリの両方に新しい拡張があり、正直に言うと、これは遅すぎて、03年から11年、IT技術は日進月歩で、C++標準ライブラリはやっと1版更新されて、本当にC++開発者の悲しみです.
余談が出たので本題に入る.
1.Lambda式
あなたは絶対に読めないC++11の新しい表現を学ばない.BoostにはLambdaというライブラリがあり、c++11のLambda機能は類似しており、匿名関数に加えて「閉パッケージ」のようなメカニズムをサポートしていることも知られているかもしれません.匿名関数とは何か、閉パッケージとは何かを聞くなら、ここでは説明しません.javascriptの基礎が少しあると信じています.
本題に戻りますが、C++11のLambda式の標準形式は:
[外部変数](パラメータ)->戻り値{関数体}
「->戻り値」セクションは省略できますが、省略すると戻り値タイプが導出されます.(タイプ導出は後述autoで説明する)
外部変数の伝達方法については、次のとおりです.
[]
外部変数なし
[x, &y]
xは値伝達方式でインポートし、yは参照方式でインポートする
[&]
すべての変数を参照してインポート
[=]
すべての変数を値でインポート
[&, x]
xが値伝達でインポートされるほか、他の変数は参照でインポートされます.
[=, &z]
Zが参照でインポートされるほか、他の変数が値伝達でインポートされます.
簡単な例です.
int first = 0;
int second = 0;
int third = 1;

int result = [first, &second](int p)->int{
     //first++;            ,      
     second++;
     return first + second + p;
}(third);

結果:first=0,second=1,result=2
2.自動タイプ導出auto
あまり説明しないで、以下の結果を見て分かります.
auto x = 0;   //   0 int ,  x int  ,
auto y = 3.14; // y  double  

autoは、コードをより簡単にすることもできます.例えば、次のようにします.
vector<int>::const_iterator it = v.begin();

次のように書くことができます.
auto it = v.begin();

しかしautoを乱用すると、プログラムの可読性が悪くなります.例えば、
auto obj = SomeFunction();     //               

これで問題はありません.
auto obj = new SomeObject();

3.初期化構文
{}で初期化を行い、以下の特性があります(以前はC++はサポートされていませんでした):
int* x = new int[2]{1, 2};
vector<int> v = {1, 2};

Java方式の初期化もサポートされています
class tempObj {
public:
     int x = 10;
};

4.deleteとdefault関数
deleteは、コンパイラがデフォルト関数を自動的に生成しないことを示します.defaultは正反対で、コンパイラにデフォルト関数を生成させます.たとえば、以前のC++のクラスがコンストラクション関数を定義すると、デフォルトのコンストラクション関数はサポートされなくなり、C++11はdefaultで実現できます.
class NewObj
{
    NewObj() = default; //         
    NewObj(int value);
};

5. nullptr
かつてNULLの欠陥を回避したので,C++11ではポインタ初期化をnullptrに設定すべきである.
スレッドライブラリ、スマートポインタなどの新機能は、ここでは説明しませんが、基本概念は似ていますので、使うときに調べるとわかります.
ここではn種の新しい特性を省略し、後で見てから共有しましょう.