C ++ 0xおよび初期化問題の解決

C ++ 0x Habréの記事はすでにC ++ 0x標準、特にラムダ式を扱っています。 C ++で行われるいくつかの変更と追加について書きたいと思いました。 そして、さらに苦労せずに、すぐにポイントに。





整数変数の初期化



C ++ 0xは、基本実数型を整数型にキャストする問題を解決します。 最も単純な例では、次のようになります。



クラシックC ++:



int a = 7.3; // int

void func( int );

func(5.6); //










C ++ 0xでは、{}に新しいコンストラクトを導入することで問題が解決します。



int x1 = {7.3}; // -

double d = 7;

int x2 {d}; // ,

char x3{7}; //

vector< int > vi = { 1, 2.3, 4, 5.6 }; // ,










コンストラクターの委任



C ++では、ほぼ同じアクションを実行するか、追加の関数を使用するには、2つのコンストラクターが必要です。



クラシックC ++:



class X

{

int a;

validate( int x)

{

if (0<x && x<=max) a=x;

else throw bad_X(x);

}



public :

X( int x) // int

{

validate(x);

}



X() // -

{

validate(42);

}



X( string s) // string

{

int x = lexical_cast< int >(s);

validate(x);

}

// ...

};










C ++ 0xでは、1つのコンストラクターを別のコンストラクターのコンテキストで宣言できます。



class X

{

int a;



public :



X( int x) // int

{

if (0<x && x<=max) a=x;

else throw bad_X(x);

}



X() :X{42} { } // -



X( string s) :X{lexical_cast< int >(s)} { } // string



// ...

}










ヌルポインター





標準C ++では、nullポインターは通常の0です。ライブラリーでは、#define NULL 0を見つけることができます。C++ 0xでは、特別なリテラルnullptrが導入されています。



使用例:



char * p = nullptr;

int * q = nullptr;

char * p2 = 0; // -



void f( int ); // int

void f( char *); // char*



f(0); // f(int) -

f(nullptr); // f(char*) -



void g( int );

g(nullptr); //: nullptr int

int i = nullptr; //










おわりに



もちろん、変更は表面的なものですが、言語をより安全で便利なものにします。そして最も重要なことは、ラムダ式ほど極端に見えないことです)。



続行するには...



プログイット



All Articles