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

使用using定义引用类型的引用别名:MSVC编译通过GCC拒绝是否合规?

C++引用类型别名的编译差异:MSVC vs GCC/Clang

你的代码里,using type = int(int)&;是将type定义为返回int、参数为int的函数类型的引用,而后续using type2 = type&;试图给这个引用类型再声明一层引用别名——这不符合C++标准,是MSVC的非标准扩展导致它能编译通过。

核心原因

  • C++标准明确禁止:标准规定不存在"引用的引用"这种类型,因为引用本身是对对象的绑定,重复引用没有合法语义,属于"不合格的引用类型",GCC和Clang的报错cannot declare reference to qualified reference type完全符合标准要求。
  • MSVC的非标准行为:MSVC在这里做了非标准的类型折叠处理,自动将"引用的引用"折叠为普通引用,所以允许编译,但这是编译器的扩展特性,而非标准规定的合法语法。

修正写法

如果你的需求是声明函数类型的引用别名,直接复用原类型即可,不需要额外加引用:

using type = int(int)&;
using type2 = type; // 等价于int(int)&,符合标准,所有编译器均可通过

或者直接显式声明:

using type2 = int(int)&;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:12