C++ 默认数组传递不';行不通

C++ 默认数组传递不';行不通,c++,std,default-arguments,valarray,C++,Std,Default Arguments,Valarray,在C++中,我有两个函数: 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

在C++中,我有两个函数:

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,std::valarray arr=std::valarray(0.0,1)){
非常复杂的事情
}
包装器(args,std::valarray arr=std::valarray(0.0,1)){
工作(ARG、arr);
}
调用do_work(args)和调用wrapper(args)会得到不同的结果。前者效果好;后者在do_work函数的某个地方崩溃,我不知道为什么(代码非常复杂)。为什么会这样?如果在包装器内的函数调用中省略“arr”参数:

wrapper(args, std::valarray<double> arr=std::valarray<double>(0.0, 1)) {
  do_work(args);
}
包装器(args,std::valarray arr=std::valarray(0.0,1)){ 做你的工作(args); }
然后包装器(args)工作正常!有人知道发生了什么吗?我不知道从哪里开始查找。

好吧,堆在这两种情况下的状态略有不同。在主题之外,您应该使用1。或1.0,因为1是整数,而不是双精度。一些编译器会对此发出恼人的警告。