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

模板参数auto&& arg是通用/转发引用还是右值引用?

问题解答

在给定的C++模板定义中:

template<auto&& arg>
struct test {};

模板参数arg属于右值引用,而非通用/转发引用。

关键原因:

通用/转发引用的核心要求是:声明必须为形如T&&的形式,其中T是一个模板类型参数(或在函数的auto&&参数推导场景中),且依赖模板参数的类型推导来触发引用折叠。

而这里的auto&&是作为非类型模板参数的声明,auto的作用是推导非类型参数的具体类型,而非作为模板类型参数参与推导。这种情况下,auto&&不会触发通用引用的规则,它就是一个单纯的右值引用:

  • 当传入右值(比如test<5>)时,arg的类型是int&&,绑定到右值常量;
  • 若尝试传入左值(比如int a=5; test<a>),会直接编译失败,因为右值引用无法绑定到左值——这完全不符合通用引用可以同时绑定左值、右值的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:04:51