为了账号安全,请及时绑定邮箱和手机立即绑定

在C ++中使用C标头时,我们应该使用std ::或全局名称空间中的函数吗?

在C ++中使用C标头时,我们应该使用std ::或全局名称空间中的函数吗?

C++
Smart猫小萌 2019-11-12 10:53:20
C在某种程度上,也不完全是C ++的子集。因此,我们可以通过改变名称一点点(使用最多的C函数的C /头++ stdio.h来cstdio,stdlib.h到cstdlib)。我的问题实际上是一种语义。在C ++代码(使用最新版本的GCC编译器)中,我可以调用printf("Hello world!");和std::printf("Hello world!");,它的工作原理完全相同。在我使用的参考资料中,它也显示为std::printf("Hello world!");。我的问题是,是否首选std::printf();在C ++中使用?有区别吗?
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

不,您都可以。

最初的目的就是让这个<___.h>标题会是这把一切都放在全局命名空间中的C版本和<c___>标题将是C ++ -指明分数的版本,这一切都发生在std命名空间。

但是实际上,C ++版本还将所有内容都放入了全局名称空间。并没有明确的共识认为使用这些std::版本是“正确的事情”。

因此,基本上,使用您喜欢的任何一种。最常见的可能是在全局名称空间(printf而不是std::printf)中使用C标准库函数,但是没有太多理由认为一个“更好”。


查看完整回答
反对 回复 2019-11-12
?
暮色呼如

TA贡献1853条经验 获得超9个赞

从C ++ 11标准:


每个C头(每个头具有形式为name.h的名称),其行为就像是由相应cname头放置在标准库名称空间中的每个名称都位于全局名称空间范围内。未指定这些名称是先在名称空间std的名称空间范围(3.3.6)中声明还是定义,然后通过显式using-声明(7.3.3)注入到全局名称空间范围中。


因此,如果使用<cstdio>,可以确定,printf它将在中namespace std,因此不在全局名称空间中。

使用全局名称空间会产生名称冲突。这不是C ++方式。


因此,我正在使用<cstdio>标题,并建议您这样做。


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信