C++ には、次の 2 つの関数があります。
do_work(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
very_complicated_things
}
wrapper(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
do_work(args, arr);
}
do_work(args) を呼び出して wrapper(args) を呼び出すと、異なる結果が得られます。前者は問題なく動作します。後者は do_work 関数のどこかでクラッシュしますが、その理由はわかりません (コードは非常に複雑です)。これはなぜですか?ラッパー内の関数呼び出しで「arr」引数を省略した場合:
wrapper(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
do_work(args);
}
その後、wrapper(args) は正常に動作します! 何が起こっているのか誰にも分かりますか?どこから探し始めたらいいのかわからない。