5

定義された関数を...

void func (int a [3]) { ... }

私はそのように動的静的配列を渡すことができるようにしたいと思います

func (new int [3] {1,2,3});

それ以外の...

int temp [3] = {1,2,3};
func(temp);

これは C++ で可能ですか?

4

3 に答える 3

4

C++11 コンパイラを使用している場合は、問題なく動作します (ただし、メモリを使用するfunc (new int [3] {1,2,3});責任があることに注意してください)。deletegcc では、-std=c++11フラグを渡すだけです。

ただし、std::array使用する必要がないように調べてくださいnew

void func (std::array<int, 3> a)
{
}

int main()
{
    func({{1, 2, 3}});
}
于 2012-10-16T04:25:40.790 に答える
2

私のコンパイラー(CDT拡張機能を備えたEclipseインディゴ)で動作しますが、すべての環境で動作するとは限らないことを示唆する警告が表示されます。

拡張初期化子リストは、-std = c++0xまたは-std=gnu++0xでのみ使用可能です[デフォルトで有効]

これが私のテストコードです:

void func (int a[3])
{
cout << a[2];
}

int main()
{
    func(new int[3]{1,3,8});
}

コンソールに「8」を正常に出力します。

于 2012-10-16T04:26:53.050 に答える
2

の例はnew int [3] {1,2,3}問題なく機能しますが、呼び出されるたびにヒープに配列が割り当てられます。

タイプキャストを使用してスタック上でそれを実行できるはずです。

func((int[]){1,2,3});
于 2012-10-16T04:30:38.257 に答える