You need to enable JavaScript to run this app. C标准库中的符号在C++中是否属于保留标识符?
优惠活动
大模型
产品
解决方案
定价
更多

C标准库中的符号在C++中是否属于保留标识符?

核心规则依据

相关规定来自C标准「保留标识符」条款(对应C20标准[lex.name]章节):

  • 所有来自C标准库的外部链接标识符,均属于全局作用域下的保留标识符。无论是否显式引入对应C标准库头文件,都不允许用户在全局作用域定义同名标识符,否则行为未定义。
  • C++标准允许标准库头文件互相引入依赖,复现代码中仅引入了<iostream>,但主流编译器实现的<iostream>内部会间接引入<time.h>相关内容,因此C标准库的time函数会被注入全局作用域,和自定义的time类产生冲突。

C与C++行为差异的原因

二者的命名空间规则存在本质区别:

  • C语言为struct/union/enum的标签提供了独立的命名空间,和普通函数、变量的命名空间互不干扰。C标准库的time是普通标识符,自定义struct的time标签属于独立命名空间,因此不会冲突。
  • C++取消了标签的独立命名空间,类名/结构体名和普通函数、变量属于同一个命名空间,只要重名就会产生冲突,这也是编译器提示必须加class前缀才能引用自定义类型的原因。

合规规避方案

除换标识符、加class前缀外,更推荐将自定义类型放到自定义命名空间中,可彻底避开全局保留标识符的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:57:01