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

为何使用引用修改变量的值?附D3D12代码示例

为何使用引用修改变量的值?(对应代码第33~36行)

你提供的非引用写法代码如下:

D3D12_RESOURCE_BARRIER resourceBarrier = { };
resourceBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
resourceBarrier.Transition.pResource = ;
resourceBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
resourceBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_DEPTH_WRITE;
resourceBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;

使用引用修改变量主要有这几个原因:

  • 减少性能开销:D3D12_RESOURCE_BARRIER是包含多个成员的结构体,不用引用的话,传递这类变量时会触发完整的结构体拷贝。对于复杂结构体来说,拷贝会占用额外内存并拖慢执行速度,而引用只是传递内存地址,几乎没有额外开销。
  • 直接修改原对象:如果这段初始化逻辑是封装在函数里,用引用作为参数的话,函数内的修改会直接作用到外部传入的原变量上,不需要再返回拷贝后的结构体,代码更简洁高效。比如封装成函数的写法:
    void InitDepthBarrier(D3D12_RESOURCE_BARRIER& barrier, ID3D12Resource* pResource) {
        barrier = { };
        barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
        barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
        barrier.Transition.pResource = pResource;
        barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
        barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_DEPTH_WRITE;
        barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
    }
    
    调用时直接传外部的resourceBarrier变量,修改会直接生效,无需额外赋值操作。
  • 保持代码风格一致:在D3D12的开发场景中,多数API和工具函数都会用引用传递复杂结构体,这样能和整个生态的代码风格对齐,也让其他开发者一眼就能看出这个变量会被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 16:37:27