You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何传递哑参数跳过不需要的函数输出参数 无需定义额外变量

C++ 跳过输出参数的简洁实现方案

你需要的类似Python中_占位符的效果可以通过自定义通用哑元占位符实现,完全不需要额外定义无用变量,以下是具体方案:

推荐方案:全局通用占位符

这种方案复用性最高,一次定义所有场景都可以使用,和Python的_使用体验完全一致:

  1. 先定义通用哑元模板和全局实例
template <typename T>
struct dummy_t {
    // 隐式转换为任意类型的左值引用
    operator T&() const {
        thread_local T dummy; // 加thread_local适配多线程场景,单线程可以去掉
        return dummy;
    }
};
// 全局占位符实例,直接用_作为变量名符合Python使用习惯
inline constexpr dummy_t<void*> _;
  1. 调用函数时直接用_占位不需要的输出参数即可,你的示例代码修改后如下:
#include <iostream>

template <typename T>
struct dummy_t {
    operator T&() const {
        thread_local T dummy;
        return dummy;
    }
};
inline constexpr dummy_t<void*> _;

/**                                                                                        
 * Calculates multiples of number
 *                                                                                         
 * @param[in] t1 number to multiply                          
 * @param[out] t2 multiplied by 2
 * @param[out] t3 multiplied by 3
 */
void calc_multiples(const int t1, int &t2, int &t3)
{
    t2 = 2*t1;
    t3 = 3*t1;
    return;
}

int main()
{
    int myNum = 7;
    // 不需要定义无用的myNumTimes2变量
    int myNumTimes3;
    
    // 直接用_占位第二个输出参数
    calc_multiples(myNum, _, myNumTimes3);
    
    std::cout << "my number times 3: " << myNumTimes3;
    
    return 0;
}

临时单次使用方案

如果你不想额外定义全局变量,只是偶尔需要跳过某个输出参数,可以直接用匿名lambda生成临时哑变量:

calc_multiples(myNum, *[](){static int dummy; return &dummy;}(), myNumTimes3);

这种方案不需要提前定义任何内容,缺点是单次写法较长,适合不常用的场景。

注意事项

  • 上述方案对所有可默认构造的类型都生效,自定义类作为输出参数也可以正常使用
  • 如果明确不会在多线程环境下使用,可以去掉thread_local修饰进一步简化代码

内容的提问来源于stack exchange,提问作者Markus Dutschke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:18:02