配列を返す関数をC++がサポートしないのはなぜですか
#include <iostream> using namespace std; int* Array() { int a[100]; a[0] = 7; a[1] = 6; a[2] = 4; a[3] = 3; return a; } int main() { int* p = Array(); cout << p[0] << " " << p[1]<<" "<<p[2]<<" "<<p[3]; return 0; }
このプログラムでは、次のように警告が表示されます
出力
In function 'int* Array()': warning: address of local variable 'a' returned [-Wreturn-local-addr] int a[100];を返しました
ローカル変数のアドレスを返しますが、関数呼び出しの終了後にローカル変数がメモリに存在しない可能性があるため、これは不可能です。そのため、C++は配列を返す関数をサポートしていません。
-
GCCでのC++標準のサポート
GCCは、公開されている複数のISO規格に対応する、C++のさまざまな方言をサポートしています。実装する標準は、-std=コマンドラインオプションを使用して選択できます。 C ++ 98 − GCCは、2003年に変更され、C++03およびその後のいくつかの欠陥レポートに名前が変更された1998C++標準を完全にサポートしています。 C ++ 11 − GCC 4.8.1は、以前はC++0xとして知られていた2011C++標準の最初の完全な実装でした。 C ++ 14 − GCCは、2014年に公開されたC++標準の最新リビジョンを完全にサポートしています。 C ++ 1
-
可変長配列がC++標準の一部ではないのはなぜですか?
スタック上に潜在的に大きな配列を作成する必要がありますが、これは通常、使用可能なスペースがほとんどないため、適切ではありません。サイズが事前にわかっている場合は、静的配列を使用できます。また、事前にサイズがわからない場合は、安全でないコードを記述します。可変長配列は、型システムで大幅な変更が必要になるため、C++にネイティブに含めることはできません。 C ++の可変長配列の代替は、ベクトルであるC++STLで提供されます。 -のように使用できます 例 #include<iostream> #include<vector> using namespace std; i