gpt4 book ai didi

c++ - 在 C++ 中使用 C 头文件时,我们应该使用 std::或全局命名空间中的函数吗?

转载 作者:IT老高 更新时间:2023-10-28 11:53:59 24 4
gpt4 key购买 nike

C 在某种程度上,不完全是 C++ 的一个子集。所以我们可以通过稍微改变名称(stdio.h to cstdio, stdlib.h)来使用C++中的大部分C函数/头文件> 到 cstdlib)。

我的问题实际上是一种语义问题。在 C++ 代码中(使用最新版本的 GCC 编译器),我可以调用 printf("Hello world!");std::printf("Hello world!"); 它的工作原理完全相同。在我使用的引用文献中,它也显示为 std::printf("Hello world!");.

我的问题是,是否更喜欢在 C++ 中使用 std::printf(); ?有区别吗?

最佳答案

来自 C++11 标准(重点是我的):

D.5 C standard library headers [depr.c.headers]

  1. For compatibility with the C standard library ...
  2. Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. It is unspecified whether these names are first declared or defined within namespace scope (3.3.6) of the namespace std and are then injected into the global namespace scope by explicit using-declarations (7.3.3).
  3. Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace std. It may also provide these names within the global namespace. The header <stdlib.h> assuredly provides the same declarations and definitions within the global namespace, much as in the C Standard. It may also provide these names within the namespace std.

不推荐使用 «name.h» header ,它们已被确定为从 future 修订版中删除的候选者。

因此,我建议包含 «cname» header 并使用 std 中的声明和定义命名空间。

如果您出于某些原因必须使用 «name.h» header (已弃用,见上文),我建议您使用全局命名空间中的声明和定义。

换句话说:喜欢

#include <cstdio>

int main() {
std::printf("Hello world\n");
}

结束

#include <stdio.h>

int main() {
printf("Hello world\n");
}

关于c++ - 在 C++ 中使用 C 头文件时,我们应该使用 std::或全局命名空间中的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32606023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com