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

C++26下划线(_)变量规则及独立名称声明技术咨询

C++26中下划线(_)变量规则及相关问题解答

代码示例说明

你提供的代码在C26之前的标准中会触发重复定义错误,但在C26标准下(开启-std=c++2c或-std=gnu++2c编译选项),这段代码是合法的,编译器仅会给出扩展特性的警告:

void foo() {
    int _;
    // warning: name-independent declarations only available with
    //           '-std=c++2c' or '-std=gnu++2c' [-Wc++26-extensions]
    int _;
}

一、C++26中关于下划线(_)变量的规则

在C++26中,下划线(_)被定义为特殊的独立名称,具体规则如下:

  • 块作用域(如函数内部)中,可重复声明类型相同的_变量,这些声明会被视为引用同一个变量,不会触发重复定义错误。
  • 若重复声明的_变量类型不同,会触发编译错误。
  • 全局作用域或命名空间作用域中的_变量规则保持不变,仍遵循原有标准的命名限制(比如全局作用域的_开头名称属于保留名)。

二、什么是独立名称声明(name-independent declaration)

独立名称声明是C++26引入的新特性,核心含义是:使用特殊标识符_进行的变量声明,其绑定关系不依赖于标识符本身的名称,而是依赖于声明的类型和作用域上下文。
简单来说,同一个块作用域内,所有类型一致的_变量声明都会指向同一个变量实体,相当于重复引用而非重复定义。这和普通变量的声明规则完全不同——普通变量的名称是唯一标识,重复声明同名普通变量会触发错误。

三、C++26中下划线(_)变量规则的具体变化

对比C20及更早的标准,C26的变化主要集中在块作用域内:

  • 旧规则:任何作用域中,普通变量的重复声明(除非是外部链接声明)都会触发编译错误,_作为普通标识符也遵循此规则,块作用域内重复声明int _;会报错。
  • 新规则:块作用域内,类型相同的_变量重复声明被允许,视为对同一变量的多次声明;只有当类型不一致时(比如先声明int _;再声明double _;),才会触发错误。
  • 全局/命名空间作用域的_命名规则未变,仍然不能直接使用单个_作为变量名(属于标准保留的命名空间)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:15