整数変数の初期化
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; //
おわりに
もちろん、変更は表面的なものですが、言語をより安全で便利なものにします。そして最も重要なことは、ラムダ式ほど極端に見えないことです)。
続行するには...