配列を値でC++関数に渡すことは可能ですか?
もしそうなら、どうすればいいですか?
配列とは生の配列を意味する場合、答えは「いいえ」です。CまたはC++のいずれかで値を渡すことはできません。
どちらの言語も回避策を提供しており、struct
その配列をラップしてそのオブジェクトを渡すことができます。例:
struct MyArray { int a[100]; };
...
struct MyArray obj; // `obj.a[]` is the array of your interest
foo(obj); // you have passed the `a[]` by value
C ++では、このような構造体はstd::vector
との形式ですぐに利用できますstd::array
。
絶対:
void foo(std::array<int, 42> x);
通常、配列を関数に渡すと、配列は に減衰しpointer
ます。配列の (開始) アドレスを暗黙的に関数に渡します。したがって、実際には配列を値で渡すことはできません。va_args
内容を値渡ししたい場合は使ってみませんか?
はい、できます。引数としてポインタを使用して実装できますが、関数本体では、copy mothord (正確な名前は思い出せません) を使用してコピーできます。