std命名空间,该如何处理
std命名空间
C++标准的的所有成员都被置于std命名空间内,那么从C继承的成员也应该被置于std命名空间;但是测试发现使用继承的C成员不用加std命名空间限定,即使加了也结果也是一样的。很纠结,一直找不到能直接引用C成员的理由说明,求解
------解决方案--------------------
是为了利于C代码向C++编译器的迁移。
------解决方案--------------------
#include <string.h>
strcpy, ::strcpy 可以使用
但是strcpy函数不会进入 namespace std; 所以
std::strcpy不能使用
#include <cstring>
strcpy, ::strcpy 可以使用.
同时strcpy函数不会进入 namespace std; 所以
std::strcpy可以使用
举例说明
编译输出
------解决方案--------------------
楼主,可能你忘了,C的是全局命名空间的,C++中的C也是全局命名空间的,而C++采用的是标准命名空间,如<iostream>,以前的版本有iostream.h的这个是全局命名空间的,不加std的也。
说白了,为了兼容C吧,为了兼容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++的库文件都写得可读性比较差。