0
4

3 に答える 3

7

2 つのスニペットの間にはほとんど関係がありません。

最初のものは変数を宣言して初期化しますlRootが、そこには何も表示されません。

2 番目のスニペットは、最初の行で宣言し、デフォルトで初期化しますが、その後、 type の引数でonlRootを呼び出します。は を定義していないため、コンパイラは指定されたエラーを生成します。operator()lRootOgre::root*std::auto_ptr operator()

于 2013-03-04T21:49:36.913 に答える
6

最初のステートメントは、初期化を伴う変数の宣言ですlRoot(括弧内に初期化子の構文を使用)。

2つ目は、デフォルトで初期化された変数の宣言でありlRoot、その後に変数を呼び出しoperator()ます。(そのstd::auto_ptrような演算子を定義しないことに注意してください)。

これを2行に分割するには(まだ1つのステートメントとして)、空白が許可されている場所に改行を挿入できます。

std::auto_ptr<Ogre::Root> lRoot(
  new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));

これを実際に宣言と割り当てに分割するには(分割する場合、初期化にすることはできないことに注意してください)、次のようにすることができます。

std::auto_ptr<Ogre::Root> lRoot;
lRoot.reset(new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));
于 2013-03-04T21:53:34.930 に答える
3

それらは同じものではありません!

ステートメントを 2 行に分割しているだけではありません。2つは2つの異なるステートメントです..

次のように、最初のステートメントを 2 行に分割できます。

std::auto_ptr<Ogre::Root> lRoot
    (new Ogre::Root(lConfigFileName, lPluginsFileName, lLogFileName));

複数の空白が無視されるため、問題なくコンパイルされます。

于 2013-03-04T21:47:44.197 に答える