眼下我的工作环境还是win。全部演示也用VS或者cygwin这些环境作为基础。

1、配置项目的附加include目,添加提前定义位置集设置,编译器会把它添加include路径,比方在某个目录中定义一个vector(不带后缀),当我们项目中使用#include<>时。能够搜索到两个vector。分别为自己定义和系统自带的C++ stl中的。可是实际项目编译的时候会发现,自己定义的提前定义位置集的文件具有高优先级。简单点理解就是在出现路径歧义的情况下自己定义的会覆盖掉stl标准库。

猜想1:假设提前定义位置集中所添加的不同路径中有两个同样的文件,include採用的是有歧义形式的方式。即不附带完整路径,使用的是哪个文件?

測试结果:VS编译使用的是路径1中的。

其它编译器仍要又一次測试一遍,比方gcc 4.8.3。 待续。

猜想2:假设提前定义位置集中所添加的不同路径中有两个同样的文件,include採用的是有非歧义形式的方式,即附带完整路径#include<test/vector>,是否能同一时候使用的是两个文件?或者说使用的是哪个文件?

測试结果:VS编译使用的是路径1中的。其它编译器仍要又一次測试一遍,比方gcc 4.8.3。 待续。。

编译结果:

1>------ 已启动生成: 项目: TestSizeofBits, 配置: Debug Win32 ------
1> stdafx.cpp
1> TestSizeofBits.cpp
1>d:\cpp_lab\testsizeofbits\include4\ok\vector(4): error C2084: 函数“void print(void)”已有主体
1> d:\cpp_lab\testsizeofbits\include3\include\vector(3) : 參见“print”的前一个定义
1>d:\cpp_lab\testsizeofbits\testsizeofbits\testsizeofbits.cpp(151): error C3861: “print”: 找不到标识符
1> testNamespace.cpp
1> 正在生成代码...
========== 生成: 成功 0 个。失败 1 个,最新 0 个。跳过 0 个 ==========

也就是说VS编译器是识别非歧义的两个文件,出现了命名冲突。当我通过命名空间处理了两个文件的冲突后,VS就能够正确地识别两个文件的内容。并完毕链接。

为什么我要測试这些?由于我想把sgi_stl或者boost等库的内容引入个人的文件里。可是会出现同名冲突。而仅仅要处理好路径和命名空间中。就能够正确地使用自己定义的同名库。

//vector

#pragma once
#include <iostream>
void print3()
{
std::cout<<"jingz;s vector3"<<std::endl;
}

#include <include/vector>
#include <ok/vector>
#include <vector>

print3();

	print4();

	vector<int> arrInt(10);

	arrInt[0] = 1;

	cout<<arrInt[0]<<endl;

測试程序正确执行。

猜想3:提前定义命令是否影响?

结果:我尝试了一下使用不同的提前定义,可是没不论什么变化。

结论:添加自己定义的位置集,就可以替换相应库。

而设计库的时候要使用无歧义路径才是兼容程序猿用户使用自己定义的组件替代默认库提供的组件。

求评论。好或坏。请支持正版链接。

stl源代码剖析:编译器的提前定义位置集设置的更多相关文章

  1. 《STL源代码剖析》---stl_deque.h阅读笔记(2)

    看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...

  2. STL源代码剖析——STL算法stl_algo.h

    前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法.本文剖析STL其它的算法,比如排序算法.合并算法.查找算法等等.在剖析的时候.会针对函数给出一些样例说明函数的使用.源代码出自SG ...

  3. STL源代码剖析——基本算法stl_algobase.h

    前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...

  4. STL源代码剖析——STL算法之set集合算法

    前言 本节介绍set集合的相关算法,各自是并集set_union,差集set_difference,交集set_intersection 和对称差集set_symmetric_difference.这 ...

  5. STL源代码剖析(二) - 迭代器与traits技法

    提要 先看一段用迭代器的代码: int a[] = {1, 2, 3, 4, 5}; vector<int> v1( a, a+5); vector<int>::iterato ...

  6. STL源代码剖析(一) - 内存分配

    Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...

  7. STL源代码剖析 读书总结

    <<STL源代码剖析>> 侯捷著 非常早就买了这本书, 一直没看, 如今在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型 ...

  8. 《STL源代码剖析》---stl_alloc.h阅读笔记

    这一节是讲空间的配置与释放,但不涉及对象的构造和析构,仅仅是解说对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本号的STL对空间的的申请和释放做了例如以下考虑: 1.向堆申请空间 2.考虑 ...

  9. STL源代码剖析 容器 stl_list.h

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie list ----------------------------------------- ...

随机推荐

  1. 简单的web三层架构系统【第二版】

    昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...

  2. asp.net MVC过滤器的用法(转)

    转自:http://www.studyofnet.com/news/257.html APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再 ...

  3. 揭秘Amazon反应速度超快的下拉菜单

    揭秘Amazon反应速度超快的下拉菜单 如果你以前觉得Amazon这家公司不太在用户体验上下功夫,这篇文章可能会改变你的看法. Amazon主页的左上角有一个商品分类浏览的下拉菜单.当鼠标从菜单中的选 ...

  4. (转)Windows重启延迟删除,重命名技术原理

    所谓重启延迟删除技术,就是在操作系统启动前删除或者替换文件! 说起重启延迟删除,大家可能都很陌生,但是实际上,该功能已经被各种软件所采用:如安装Windows 补丁程序(如:HotFix.Servic ...

  5. CV_EXPORTS定义及作用

    CV_EXPORTS 常用如下: class CV_EXPORTS MatExpr; template<typename _Tp> class CV_EXPORTS Size_; CV_E ...

  6. [LeetCode]题解(python):073-Set Matrix Zeroes

    题目来源: https://leetcode.com/problems/set-matrix-zeroes/ 题意分析: 输入一个m×n矩阵,如果出现有0,那么将对应的行和列都变成0. 题目思路: 简 ...

  7. wsdl透明解析

    1.逐个分析wsdl文件中的元素: <types>:数据类型定义的容器,一般使用 xml schema类型系统. <message>:通信消息的数据结构的抽象化定义,使用< ...

  8. 磁盘IO子系统学习资料

    1.http://www.ibm.com/developerworks/cn/linux/l-cn-read/    (IBM read系统调用剖析) 2.http://lenky.info/arch ...

  9. mongodb 学习初探

    1.去mongodb 官方下载 http://www.mongodb.org/downloads 2.下载php的mongodb扩展 http://files.cnblogs.com/lsl8966/ ...

  10. Qt控制台和带窗口的区别_mickelfeng_新浪博客

    Qt控制台和带窗口的区别_mickelfeng_新浪博客     t控制台和带窗口的区别    (2012-04-30 10:50:53)    标签:    杂谈        分类: C/C    ...