读书人

std命名空间,该如何处理

发布时间: 2013-01-17 10:28:54 作者: rapoo

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++的库文件都写得可读性比较差。

读书人网 >C++

热点推荐