1

私はいくつかのテキストを解析していますが、配列を独自の行で定義するのではなく、右辺値として使用できれば、私の生活は楽になります。私はこれをしました

 int a[]={1,2,3}; //its own line. Do not want

 func([]()->int*{static int a[]={1,2,3}; return a; }()); //It compiles but untested. It doesn't compile with 2003

私は試した

 func(int []={1,2,3}); //but got a compile error bc this is simply illegal

行の最後に追加のものを置くことはできますが、前に置くことはできません。何かアイデアはありますか?

4

3 に答える 3

4
func([]()->int*{int a[]={1,2,3}; return a; }()); //works well on C++0x.

コメントがうまく機能しているのは面白いと思います。私はラムダ弁護士ではありませんが、上記のコードはローカル変数へのポインターを返していると思います。これは未定義の動作であるため、コンパイルしても正しいとは限りません。

内部で何が起こるかについては、コンパイラが次のような方法でラムダをファンクターに変換することを理解しています(これは、キャプチャがないことと正確なラムダを考慮した単純化であることに注意してください。

struct __lambda {
   // no captures: no constructor needed, no member objects needed
   int* operator()() {        // returns int*, no arguments

      int a[] = { 1, 2, 3 };  // auto variable
      return a;               // return &a[0], address of a local object
   }
};
于 2011-06-06T14:13:22.050 に答える
3

これがあなたの望むものかどうかはわかりませんが、次のことができます。

  for ( int a[3] = {1, 2, 3}; func( a ), false; );

Microsoftコンパイラはこれをサポートしていませんが、C++'03標準に従って有効であることに注意してください。

于 2011-06-06T14:11:43.030 に答える
0

C ++ 03で実行できるのは、配列を構造体/クラスに含めることだけです。次に、オブジェクト全体を渡すことができます。

于 2011-06-06T14:05:41.530 に答える