<iostream.h>和<iostream>的区别,以及using namespace等
2013-01-22 13:14
393 查看
1、使用std命名空间中的东西,需要#include <iostream>,还有一个可疑的<iostream.h>是什么呢?
<iostream.h>是为了兼容以前的C++代码,相当于在C中调用库函数,使用全局namespace,不加using namespace std那句也识别std中的名称。<iostream>是为了支持新的标准,新标准规定C++头文件不加.h。<iostream>中没有定义全局命名空间,必须using std;这样才能正确使用C++标准程序库中的所有标识符。
2、关于命名空间
头文件中不要用using声明,会弄得到处都是的。
常见的:类的定义在引用标准库内容时完整地使用 std:: 限定符。
❤看到.h的第一反应是到处都是
为什么不要把全局变量/函数定义写在.h里?
把定义写在.h里,.h被多处包含的话,就会引发重复定义。 可爱的连接错误error LNK2005就出现了。
尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次。定义是分配空间并赋初值(如果有) 的声明。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。
把全局变量定义写在.h里。然后,在全局变量前加 __declspec(selectany) 。 就是有重复定义 但是随便选一个的意思。。不会再报告重复定义的连接错误了。。。据说整模板的人 会这么用 比较方便 呵呵 用的不多。。有待考证。
同样的,using [namespace] XXX 也不用在.h里,会“到处都是”的,引起名字空间污染不在话下。
3、using还有其他用处
<iostream.h>是为了兼容以前的C++代码,相当于在C中调用库函数,使用全局namespace,不加using namespace std那句也识别std中的名称。<iostream>是为了支持新的标准,新标准规定C++头文件不加.h。<iostream>中没有定义全局命名空间,必须using std;这样才能正确使用C++标准程序库中的所有标识符。
2、关于命名空间
using namespace std; /*暴露std的全部名称 保证在本句之后的区域中可以直接使用叫做std的名字空间的全部成员 原本需要输入std::xxx的,可以直接输入xxx来使用*/ /*std指C++标准程序库 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中(standard) */ //为防止命名污染,更常用的是以下形式: using std::cout; using std::endl;
头文件中不要用using声明,会弄得到处都是的。
常见的:类的定义在引用标准库内容时完整地使用 std:: 限定符。
❤看到.h的第一反应是到处都是
为什么不要把全局变量/函数定义写在.h里?
把定义写在.h里,.h被多处包含的话,就会引发重复定义。 可爱的连接错误error LNK2005就出现了。
尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次。定义是分配空间并赋初值(如果有) 的声明。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。
把全局变量定义写在.h里。然后,在全局变量前加 __declspec(selectany) 。 就是有重复定义 但是随便选一个的意思。。不会再报告重复定义的连接错误了。。。据说整模板的人 会这么用 比较方便 呵呵 用的不多。。有待考证。
同样的,using [namespace] XXX 也不用在.h里,会“到处都是”的,引起名字空间污染不在话下。
3、using还有其他用处
class Base { public: std::size_t size() const { return n; } protected: std::size_t n; }; class Derived : private Base { //private继承 public: // maintain access levels for members related to the size of the object using Base::size; //可以使用 using 声明访问基类中的名字 恢复到基类中的访问级别 protected: using Base::n; // ... }; -C++ Primer ver.4-
相关文章推荐
- C++Primer--->#include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- 详解C++中经常看到的#include <iostream> using namespace std;
- C++Primer--->#include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- #include <iostream> 和#include <iostream.h> 以及include " "的区别
- #include <iostream> #include <string> //忘写一万遍!!! using namespace std;
- #include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- Mybatis的<if>和<choose>的区别 以及“=”判断
- #include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- #include <iostream>和using namespace std;
- 2,3 c++中 #include< >头文件 和 命名空间 Using namespace std的解释和区别
- #include &lt;iostream.h&gt; 和 #include &lt;iostream&gt; using namespace std的区
- HTML标签<b>与<strong>以及<i>与<em>的区别
- <iostream>和<iostream.h>的区别
- //使用条件表达式作为简单的“如果...那么...”判断。 #include <iostream> using namespace std; int main() { int score=2; s
- 为什么在#include <iostream>后还需要using namespace std
- #include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- #include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别
- using namespace std 和 include <string>的区别
- #include <iostream> using namespace std; C++命名空间是什么?
- #include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别