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

为何C++中class::A写法可通过编译?

为什么C++中class::A是合法语法?

先看你提供的可正常编译的代码:

class A {
    public:
    A(){}
};
int main() {
    class::A* a = new class::A();
    return 0;
}

这个看似多余的class::A写法,其实是C++注入类名机制的延伸用法,核心是为了消除命名歧义:

  • 每个类在自身作用域里会自动注入一个和类名完全相同的“内部名字”,这个名字可以用class(对应类)、struct(对应结构体)或者union(对应联合体)作为限定符,明确指代类类型,避免和作用域内其他同名的变量、函数混淆。
  • 即使在类的外部(比如全局作用域),这种写法依然合法——当当前作用域存在和类同名的其他实体时,class::A就能明确指定我们要引用的是类类型的A,而不是其他同名对象。比如如果全局作用域里有个int A;,直接写A会优先指代这个变量,class::A则会精准指向类A。
  • 你给出的例子里没有同名冲突,所以这个写法看起来没意义,但语法上是允许的,本质是C++为覆盖所有命名歧义场景保留的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:40:55