C++ 头文件与using namespace std

最近刚刚又开始看C++的教材。发现自己确实学的不认真,许多东西指到现在才搞明白。(orz,惭愧)

我再也不想在任何头文件中看到“using namespace xxx;”了

百度我发现了这句话,仔细一看原因是因为:http://www.ituring.com.cn/article/23606

如果你把using声明用在了头文件中,你会让这类问题更加恶化,因为命名冲突问题早晚都会在一个调用关系非常非常远的模块中神不知鬼不觉的出现,

而你可能需要查三层调用才可以找到原因所在,一个头文件包含了另一个直接使用using声明的头文件可以导致命名空间被立刻污染掉,

任何一个使用命名空间的文件如果使用了std命名空间的内容,都会导致这类问题。

但是在VS中发现了 一句神奇的#pragma once

是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。

#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了。

是不是有了这句话就可以使用using namespace xxx了呢~?!

时间: 2024-10-12 21:42:29

C++ 头文件与using namespace std的相关文章

理解C++中的头文件和源文件的作用【转】

一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码.C+ +语言支持"分别编译"(separatecompilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做

C++中头文件与源文件的作用详解

一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件―― .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码. C++ 语言支持"分别编译"(separatecompilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cpp 文件里..cpp 文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通

C++头文件应该干的事情

C++头文件应该干的事情 最近在写自己项目的时候,头文件老是编译错误,后来发现还是对头文件掌握不牢. 头文件应该干什么? 所谓的头文件,其实它的内容跟 .cpp 文件中的内容是一样的,都是 C++ 的源代码.但头文件不用被编译.我们把所有的函数声明全部放进一个头文件中,当某一个 .cpp 源文件需要它们时,它们就可以通过一个宏命令 "#include" 包含进这个 .cpp 文件中,从而把它们的内容合并到 .cpp 文件中去.当 .cpp 文件被编译时,这些被包含进去的 .h 文件的作

(转) [C++]我再也不想在任何头文件中看到using namespace xxx这种句子了(译)

原文的传送:I don’t want to see another “using namespace xxx;” in a header file ever again 转自  http://blog.csdn.net/pleasecallmewhy/article/details/8528702     在这里,我毫不回避地说了这句话. 作为一个开发者/团队领导者,我经常会去招聘新的项目成员,有时候也帮助其他组的人来面试应聘者.作为应聘流程之一,我经常要求应聘者写一些代码,因此我检查过相当多的

C++头文件和std命名空间

C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译.这个时候的 C++ 仍然在使用C语言的库,stdio.h.stdlib.h.string.h 等头文件依然有效:此外 C++ 也开发了一些新的库,增加了自己的头文件,例如: iostream.h:用于控制台输入输出头文件. fstream.h:用于文件操作的头文件. complex.h:用于复数计算的头文件. 和C语言一样,C++ 头文件仍然以.

C++命名空间和头文件的关系 例如已经使用了#include<string>,为什么还要 using std::string?

(1)如果C++程序中使用了带后缀".h"的头文件,那么不必在程序中声明命名空间,只需要文件中包含头文件即可:(2)C++标准要求系统提供的头文件不带后缀".h",但为了表示C++与C的头文件既有联系又有区别,C++中所用头文件不带后缀".h",而是在C语言的相应头文件名之前加上前缀c: (3)自定义的头文件通常带后缀“.h",系统标准库文件不带后缀“.h". (4)因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很

没有躲过的坑--头文件相互包含(Compiler error C2653: not a class or namespace name)

最近被自己坑儿了一把,改别人的代码,最后编译器这样报错的: error C2653: not a class or namespace name 简单描述一下: 有一个类A,声明和实现分别位于 a.h和a.cc中 有一个类B,声明和实现分别位于 b.h和b.cc中 类A的某个成员函数需要B类类型作为参数 类B的某个成员函数需要A类类型作为参数 a.h文件如下: #ifndef A_H_ #define A_H_ #include "b.h" class A { public: enum

using namespace 该不该出现在引用的头文件?

在实际的项目当中,几乎任何一个模块都被封装在一个独立的命名空间之中,在这里会产生一个问题: 例如模块A的命名空间定义为A,我们现在需要在其他的模块中使用A命名空间下的定义变量B,在这里就会有两种方法: 方法一:在头文件中直接使用:using namespace A 方法二:在头文件中使用:A::B,然后在.cpp文件中使用using namespace A 在这里有一个疑问:调用变量B,是否需要添加B的定义头文件,我想这个应该是必须的吧.

STL_头文件

#include <string> #include <vector> #include <deque> #include <queue> #include <stack> #include <list> #include <set> #include <map> #include <algorithm> // 算法 #include <numeric> // 算法 #include &