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

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 ++中使用?有区别吗?


Smart猫小萌
浏览 659回答 3
3回答

海绵宝宝撒

不,您都可以。在最初的目的就是让这个<___.h>标题会是这把一切都放在全局命名空间中的C版本和<c___>标题将是C ++ -指明分数的版本,这一切都发生在std命名空间。但是实际上,C ++版本还将所有内容都放入了全局名称空间。并没有明确的共识认为使用这些std::版本是“正确的事情”。因此,基本上,使用您喜欢的任何一种。最常见的可能是在全局名称空间(printf而不是std::printf)中使用C标准库函数,但是没有太多理由认为一个“更好”。

暮色呼如

从C ++ 11标准:每个C头(每个头具有形式为name.h的名称),其行为就像是由相应cname头放置在标准库名称空间中的每个名称都位于全局名称空间范围内。未指定这些名称是先在名称空间std的名称空间范围(3.3.6)中声明还是定义,然后通过显式using-声明(7.3.3)注入到全局名称空间范围中。因此,如果使用<cstdio>,可以确定,printf它将在中namespace std,因此不在全局名称空间中。使用全局名称空间会产生名称冲突。这不是C ++方式。因此,我正在使用<cstdio>标题,并建议您这样做。
打开App,查看更多内容
随时随地看视频慕课网APP