C++中指针默认参数的使用可以用下面的代码来演示
#include <iostream>
void myfunc_(int var, double* arr = 0) {
if (arr == 0) {
std::cout << "1 arg" << std::endl;
} else {
std::cout << "2 arg" << std::endl;
}
}
int main() {
myfunc(1);
double *arr = new double[2];
myfunc(1, arr);
}
在这种情况下,程序的输出是
1 arg
2 arg
另一方面,如果我尝试将可选参数从 Fortran 传递到 C++,它就不起作用。下面的示例代码演示了这种情况
myfunc.cpp _
#include <iostream>
extern "C" void myfunc_(int var, double* arr = 0) {
if (arr == 0) {
std::cout << "1 arg" << std::endl;
} else {
std::cout << "2 arg" << std::endl;
}
}
和Fortran 主程序
program main
use iso_c_binding
real*8 :: arr(2)
call myfunc(1)
call myfunc(1, arr)
end program main
并且可以使用以下命令编译混合代码(Fortran 和 C++)而不会出现任何错误
g++ -c myfunc.cpp
gfortran -o main.x myfunc.o main.f90 -lstdc++ -lc++
但程序打印
2 arg
2 arg
在这种情况下。那么,有没有解决这个问题的方法?我在这里错过了什么吗?我认为在混合编程中使用默认参数并没有按预期工作,但此时我需要建议。