あるインタビューで、私は次のような質問に直面しました。
あなたの友人は、フィボナッチ数をコンソールに出力する単一のソース コード ファイルをあなたに渡しました。main() ブロックは空で、内部にステートメントがないことに注意してください。
これがどのように可能かを説明してください (ヒント: グローバルインスタンス!)
私は本当にこれについて知りたいです、どのようにそのようなことが可能なのか!
あるインタビューで、私は次のような質問に直面しました。
あなたの友人は、フィボナッチ数をコンソールに出力する単一のソース コード ファイルをあなたに渡しました。main() ブロックは空で、内部にステートメントがないことに注意してください。
これがどのように可能かを説明してください (ヒント: グローバルインスタンス!)
私は本当にこれについて知りたいです、どのようにそのようなことが可能なのか!
それはおそらく次のように実装されます(またはその変形):
void print_fibs()
{
//implementation
}
int ignore = (print_fibs(), 0);
int main() {}
このコードでは、関数ignore
に入る前にグローバル変数を初期化する必要がありますmain()
。グローバルを初期化するには、print_fibs()
何でもできる場所で実行する必要があります — この場合、フィボナッチ数を計算して出力します! 私が次の質問で示したのと同様のことです(私はずっと前に尋ねました):
このようなコードは安全ではなく、一般的に避けるべきであることに注意してください。たとえば、が実行されstd::cout
たときにオブジェクトが初期化されない場合があります。ただし、他の状況でそのような初期化順序に依存しない場合は、初期化関数を呼び出しても安全です (これは C および C++ で一般的な方法です)。print_fibs()
std::cout
あなたが言うような例をいくつか知っています。それを取得する 1 つの方法は、テンプレート メタプログラミングを使用することです。これを使用すると、一部の計算プロセスをコンパイルに移動できます。
ここでは、フィボナッチ数の例を取得できます
静的クラスのコンストラクターで使用すると、メイン関数にコードを記述する必要なく数値を記述できます。
お役に立てば幸いです。