87

あるインタビューで、私は次のような質問に直面しました。

あなたの友人は、フィボナッチ数をコンソールに出力する単一のソース コード ファイルをあなたに渡しました。main() ブロックは空で、内部にステートメントがないことに注意してください。

これがどのように可能かを説明してください (ヒント: グローバルインスタンス!)

私は本当にこれについて知りたいです、どのようにそのようなことが可能なのか!

4

6 に答える 6

128

それはおそらく次のように実装されます(またはその変形):

 void print_fibs() 
 {
       //implementation
 }

 int ignore = (print_fibs(), 0);

 int main() {}

このコードでは、関数ignoreに入る前にグローバル変数を初期化する必要がありますmain()。グローバルを初期化するには、print_fibs()何でもできる場所で実行する必要があります — この場合、フィボナッチ数を計算して出力します! 私が次の質問で示したのと同様のことです(私はずっと前に尋ねました):

このようなコードは安全ではなく、一般的に避けるべきであることに注意してください。たとえば、が実行されstd::coutたときにオブジェクトが初期化されない場合があります。ただし、他の状況でそのような初期化順序に依存しない場合は、初期化関数を呼び出しても安全です (これは C および C++ で一般的な方法です)。print_fibs()std::cout

于 2013-07-08T15:17:33.133 に答える
4

あなたが言うような例をいくつか知っています。それを取得する 1 つの方法は、テンプレート メタプログラミングを使用することです。これを使用すると、一部の計算プロセスをコンパイルに移動できます。

ここでは、フィボナッチ数の例を取得できます

静的クラスのコンストラクターで使用すると、メイン関数にコードを記述する必要なく数値を記述できます。

お役に立てば幸いです。

于 2013-07-08T15:21:07.157 に答える