c++ - 参数类型不同的相同函数 - 按值/引用传递

标签 c++

已编辑:请注意,当我提到性能比较时,它不是 C++ 传递引用与传递值的性能比较。更多的是测试CPLEX底层算法(求解线性规划)在CPLEX对象按值传递还是按引用传递时是否运行得更好。

大家好:

当函数的参数按值传递 (PBV) 和同一函数的参数按引用传递 (PBR) 时,我需要测试程序的性能。我正在使用一个库(IBM ILOG CPLEX,用于运筹学/线性编程相关工作),根据库的手册,该库中的类对象可以是 PBV 和 PBR,不幸的是,它对其中一个的功效保持沉默其他。我只是想测试选择其中一个是否会导致性能问题。

对此进行测试的一种蛮力方法可能是拥有两个源代码文件,source_pbv.cpp 和 source_pbr.cpp,其中前者具有 PBV 的所有功能,后者具有 PBR 的所有功能。这很难维护。我想知道如何(如果有的话)使用单个 .cpp 文件来测试性能。

例如,在头文件中,我可以定义类似的东西吗

#define PBV 0 //0 value here indicates I want to PBR, 1 value here indicates I want to PBV

定义完后,函数声明部分是否有效?

#if PBV == 0 // I want to PBR
     function_to_call(Class1& class1object);//PBR function declaration
#elif PBV == 1 // I want to PBV
     function_to_call(Class1 class1object);//PBV function declaration
#endif

然后,在源代码中,我可以简单地拥有

function_to_call(class1object);

这个调用是转换成 PBV 还是 PBR 取决于我在 header 部分中的#define PBV。

如果这不是正确的方法,我们将不胜感激任何指向正确方向的指示。

此外,如果这种方式不错,我是否不必在代码主体中指定以下内容:

function_to_call(Class1& class1object){//Actual function details for PBR
    //Stuff
}

function_to_call(Class1 class1object){//Actual function details for PBV
    //Stuff
}

//Stuff 被重复了两次?有什么办法可以避免这种情况吗?

谢谢。

最佳答案

您的解决方案看起来不错,但它不允许您在单次运行中测试 PBV 与 PBR(因为从一种“模式”切换到另一种“模式”需要重新编译)。另一种解决方案是使 function_to_call 的参数类型成为模板参数。结果基本上是一样的,但您可以调用 function_to_call<Class1> (PBV) 和 function_to_call<Class1 &> (PBR) 并让编译器实例化两个版本。

关于c++ - 参数类型不同的相同函数 - 按值/引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4123938/

相关文章:

c++ - 包括它们在 C++、Windows 中的调用顺序

c++ - C++如何用雅可比法求解n个方程?

c++ - 有没有办法在数学上解决 UVA 417?

C++ 二维数组搜索错误

c++ - 我可以在没有 C++ 的情况下学习 Win32 API(仅使用 C)吗?

c++ - 使用 VexCL 的 Gram 矩阵

c++ - ODBC 写入 blob 示例 Oracle C++

c++ - 创建具有自动值增量的定义头文件

统一实际分布中的 C++ 错误?

C++ OpenCV - 创建 3D 矩阵并访问其元素