为何使用引用修改变量的值?附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
相关产品推荐
相关产品推荐

