合法地转发声明 C 标准库实体,但不C++标准库实体
Legal to forward declare C standard library entities but not C++ standard library entities?
C标准库中的实体可以在C++中合法地向前声明吗?
我刚刚问了同样的问题,但对于 C,到目前为止,答案似乎是肯定的。
在 C 标准库中前向声明实体?
我知道由于上面链接的问题中给出的原因,C++标准库中的实体无法向前声明。在考虑这个问题之前,我会说 C 标准库是 C++ 标准库的一部分,因此 C 标准库中的实体不能在 C++ 中向前声明。
现在我不确定。如果 C++ 标准规定了 C 标准库的一些内容而 C 标准没有,那将是令人惊讶的。
我的理解是,在实践中,C++的实现往往带有 C 的实现,并且每个都使用相同的头文件和库(但可以选择重命名为 C++)。因此,在实践中,C 标准库中实体的前向声明可能会在C++中编译得很好。不过,我很好奇C++标准规定了什么。
问题是 C++ 和 C 在对象级别不兼容......例如,写法就不同了:
double atof(const char *);
和
extern "C" {
double atof(const char *);
}
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 使用指针重新分析实体
- 如何使用tinyxml2从XML加载父实体和子实体
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 标准::变体的赋值运算符
- 合法地转发声明 C 标准库实体,但不C++标准库实体