リストの初期化とそのさまざまなフレーバーを読んだ後、XcodeとObjective-C ++を使用して作成しているopenGLESアプリのいくつかの機能を、かなりあいまいなものに遭遇するまでテストすることにしました。
GLKVector2などのPODを初期化するために次の構文を使用する従来のCスタイルの構造体の初期化について知っています(そして頻繁に実装します)。
GLKVector2 point = { 0,0 }; //copy-initialized
ただし、このアプローチは、プログラマーが意図したものであるとは限りません。したがって、割り当て(および不要なコピー構築操作)を削除して、直接初期化を優先すると、(ドキュメントから)上記の宣言は次のように表示されると想定されます。
GLKVector2 point{ 0,0 }; //direct-initialized, but generates compile error
ただし、コードが次のようになっている場合、コンパイラは文句を言いません。
GLKVector2 point{ { 0,0 } };
私には、これpoint
は内部構造から作成された一時的なものから直接初期化されている{ 0,0 }
ように見え、したがって最初のアプローチに勝る利点はありません。一時的なものは、割り当てと割り当て解除を行う必要があります。
あるいは、おそらくこの問題は、コンパイラを混乱させるGLKit型によって使用されるunion/structレイアウトの性質にすぎません。
コードにさらに実装する前に、この奇妙な構文についていくつか説明していただければ幸いです。