1

forコマンドを使用していくつかの変数を生成したいと思います。以下のコードを見てください:

for (char ch='a'; ch<='z'; ch++)
      int ch=0;

これは単なる例です。上記のコードを実行した後、int a、int b、intc..を作成します。

もう一つの例:

for (int i=0; i<10; i++)
      int NewiEnd=0;

たとえば、上記のコードを実行すると、int New1End、intNew2Endなどが作成されます。

私が十分に明確であることを願っています、どうすればC ++でそのようなことをすることができますか?

4

4 に答える 4

7

いいえ、不可能です、正確ではありません。ただし、これは可能です。

std::map<char,int> vars;    
for (char ch='a'; ch<='z'; ch++)
      vars[ch] = 0;

std::cout << vars['a'] << vars['b'] << vars['c'];

を持つこともできますstd::map<std::string, int>

std::map<std::string,int> vars;
for (int i=0; i<10; i++)
    vars["New" + std::to_string(i) + "End"] = 0;
std::cout << vars["New5End"];
于 2012-11-04T17:25:57.903 に答える
4

あなたがやろうとしていることは、CまたはC++では不可能です。

于 2012-11-04T17:23:49.510 に答える
4

あなたが欲しいと思われるのは、次のタイプのマップです。

std::map<std::string, int> ints;

これにより、名前で「変数」を呼び出すことができます。

ints["a"] = 0;
ints["myVariable"] = 10;

またはあなたの例で与えられているように:

std::map<char, int> ints;
for (char ch='a'; ch<='z'; ch++)
   ints[ch] = 0;

'a'-'z'を使用しようとしている場合は、intの配列を使用できます。

int ints['z' + 1];
ints['a'] = 0;
ints['z'] = 0;

ただし、これにより、「a」の下のASCII文字に不要なスペースが割り当てられます。

于 2012-11-04T17:26:11.103 に答える
2

C / C ++では、コードがコンパイルされて実行されるまでに、変数名は「なくなりました」。「リフレクション」を介して実行時に既存の変数の名前を出力することはできません...ましてや、新しい名前付き変数を作成することはできません。この機能を探している人は、それを実行できる唯一の一般的な方法は、プリプロセッサを使用することにあることに気付きます。

C++で変数名を出力する一般的な方法

プリプロセッサは、理論的には問題にも適用できますが、特定の制約があります。

Cプリプロセッサでwhileループを書き込む

しかし、あなたのコードを読んでいる人は、おそらくあなたの心に賭けをし、そうすることで正当化されるでしょう。日曜日の朝の怠惰と、それはあなたが望んでいるものではないという強い信念の両方から、私は実用的な例を書こうとしないようになります。:-)

(不思議なことに、いくつかの「興味深い」実験がありますが、プリプロセッサはチューリング完全ではありません)

C / C ++の性質は、必要に応じて名前付きテーブルを作成することです。デフォルトでこの機能を提供する言語では、リフレクションを使用するかどうかに関係なく、名前の実行時追跡の料金を支払う必要があります。これは、この特定のコンパイル言語の精神ではありません。他の人はあなたにもっと正しい軌道に乗っている答えを与えました。

于 2012-11-04T17:48:43.700 に答える