命名空间中的using有什么作用

abc20002929 2011-10-31 09:16:47
下面是<csting>中的代码
 
#if <TRADITIONAL C HEADERS>
#include<string.h>
namespace std {
using ::size_t; using ::memchr; using ::memcmp;
using ::memcpy; using ::memmove; using ::memset;
using ::strcat; using ::strchr; using ::strcmp;
using ::strcoll; using ::strcpy; using ::strcspn;
using ::strerror; using ::strlen; using ::strncat;
using ::strncmp; using ::strncpy; using ::strpbrk;
using ::strrchr; using ::strspn; using ::strstr;
using ::strtok; using ::strxfrm;
}


如上所示,我知道<cstring>是C版<string.h>的C++版本。但不清楚命名空间中的 using ::xxx 有什么作用
...全文
355 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoxing63570 2011-10-31
  • 打赏
  • 举报
回复
楼主还是回到最底层,问下自己,为什么要用命名空间,用它跟不用它的区别在那里
JieTouLangRen 2011-10-31
  • 打赏
  • 举报
回复
就是一种声明
告诉编译器我要使用这些东西
编译器就不会反馈说:不认识 那啥玩意啊
呵呵~
qq120848369 2011-10-31
  • 打赏
  • 举报
回复
#include <cstring>
#include <cstdio>

int main(int argc,char* argv[])
{
char buf[100];

strcpy(buf,"a");
printf("%s\n",buf);

return 0;
}


楼主思考一下为什么这个程序竟然能运行,就明白C++是如何拿C库来坑爹的了.
hongwenjun 2011-10-31
  • 打赏
  • 举报
回复
#pragma GCC system_header

#include <bits/c++config.h>
#include <string.h>

#ifndef _GLIBCXX_CSTRING
#define _GLIBCXX_CSTRING 1

// Get rid of those macros defined in <string.h> in lieu of real functions.
#undef memchr
#undef memcmp
#undef memcpy
#undef memmove
#undef memset
#undef strcat
#undef strchr
#undef strcmp
#undef strcoll
#undef strcpy
#undef strcspn
#undef strerror
#undef strlen
#undef strncat
#undef strncmp
#undef strncpy
#undef strpbrk
#undef strrchr
#undef strspn
#undef strstr
#undef strtok
#undef strxfrm

namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION

using ::memchr;
using ::memcmp;
using ::memcpy;
using ::memmove;
using ::memset;
using ::strcat;
using ::strcmp;
using ::strcoll;
using ::strcpy;
using ::strcspn;
using ::strerror;
using ::strlen;
using ::strncat;
using ::strncmp;
using ::strncpy;
using ::strspn;
using ::strtok;
using ::strxfrm;
using ::strchr;
using ::strpbrk;
using ::strrchr;
using ::strstr;

#ifndef __CORRECT_ISO_CPP_STRING_H_PROTO
inline void*
memchr(void* __s, int __c, size_t __n)
{ return __builtin_memchr(__s, __c, __n); }

inline char*
strchr(char* __s, int __n)
{ return __builtin_strchr(__s, __n); }

inline char*
strpbrk(char* __s1, const char* __s2)
{ return __builtin_strpbrk(__s1, __s2); }

inline char*
strrchr(char* __s, int __n)
{ return __builtin_strrchr(__s, __n); }

inline char*
strstr(char* __s1, const char* __s2)
{ return __builtin_strstr(__s1, __s2); }
#endif

_GLIBCXX_END_NAMESPACE_VERSION
} // namespace

#endif
abc20002929 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mingliang1212 的回复:]
using ::xxx;就是让::xxx在 std空间中可见。这样你就可以这样用: std::size_t sz;
只是为了让你总是可以用std::开头来写,并表明调用的是系统的函数。
[/Quote]
就为了可以用std::xxx这种形式啊?
感觉有点多此一举,要是不用using ::xxx,不管有没有用到std命名空间,程序照样可以识别xxx吧
self001 2011-10-31
  • 打赏
  • 举报
回复
#include后加一个 using namespace std;全部搞定。
iamnobody 2011-10-31
  • 打赏
  • 举报
回复
using ::xxx;就是让::xxx在 std空间中可见。这样你就可以这样用: std::size_t sz;
只是为了让你总是可以用std::开头来写,并表明调用的是系统的函数。
pengzhixi 2011-10-31
  • 打赏
  • 举报
回复
一个声明,避免你用到这些东西的时候提示你这些符号找不到

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧