std命名空间,该如何处理

std命名空间
C++标准的的所有成员都被置于std命名空间内,那么从C继承的成员也应该被置于std命名空间;但是测试发现使用继承的C成员不用加std命名空间限定,即使加了也结果也是一样的。很纠结,一直找不到能直接引用C成员的理由说明,求解
c++

------解决方案--------------------
引用:
C++标准的的所有成员都被置于std命名空间内,那么从C继承的成员也应该被置于std命名空间;但是测试发现使用继承的C成员不用加std命名空间限定,即使加了也结果也是一样的。很纠结,一直找不到能直接引用C成员的理由说明,求解
              
                  c++

是为了利于C代码向C++编译器的迁移。
------解决方案--------------------
#include <string.h>
strcpy, ::strcpy 可以使用
但是strcpy函数不会进入 namespace std; 所以
std::strcpy不能使用

#include <cstring>
strcpy, ::strcpy 可以使用.
同时strcpy函数不会进入 namespace std; 所以
std::strcpy可以使用

举例说明

/**
 * @file    demo.cpp
 * @brief   
 */

#include <cstddef>
#include <string.h>

char s1[10];
char s2[] = "strcpy";

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

    ::strcpy(s1, s2);
    std::strcpy(s1, s2);

    return 0;
}

#include <cstring>

void func(void)
{
    ::strcpy(s1, s2);
    std::strcpy(s1, s2);
}

编译输出

g++ -Wall -o demo demo.cpp
demo.cpp: In function 'int main(int, char**)':
demo.cpp:16: error: 'strcpy' is not a member of 'std'

------解决方案--------------------
    楼主,可能你忘了,C的是全局命名空间的,C++中的C也是全局命名空间的,而C++采用的是标准命名空间,如<iostream>,以前的版本有iostream.h的这个是全局命名空间的,不加std的也。
    说白了,为了兼容C吧,为了兼容C,C++的库文件都写得可读性比较差。