首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

std命名空间,该如何处理

2013-01-17 
std命名空间C++标准的的所有成员都被置于std命名空间内,那么从C继承的成员也应该被置于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++的库文件都写得可读性比较差。

热点排行