1、使用std命名空间中的东西,需要#include ,还有一个可疑的是什么呢?

是为了兼容以前的C++代码,相当于在C中调用库函数,使用全局namespace,不加using namespace std那句也识别std中的名称。是为了支持新的标准,新标准规定C++头文件不加.h。中没有定义全局命名空间,必须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-

原文链接: https://www.cnblogs.com/boldness/archive/2013/01/22/2871210.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/76391

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午5:29
下一篇 2023年2月9日 下午5:29

相关推荐