V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyyz
V2EX  ›  C

为什么 STL 的东西大多只要 include 就行,而 boost 里的东西都要链接库才行?

  •  
  •   fyyz · 2016-03-27 12:03:00 +08:00 · 3171 次点击
    这是一个创建于 3192 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不是很明白。
    因为据说做 STL 的和 BOOST 的基本上是一伙人。
    13 条回复    2016-03-30 16:05:54 +08:00
    choury
        1
    choury  
       2016-03-27 12:04:50 +08:00   ❤️ 1
    stl 的是在 libstdc++ 里面,默认已经给你链进去了
    vanxining
        2
    vanxining  
       2016-03-27 12:28:04 +08:00
    STL 每个编译器都不同,怎么可能跟 Boost 是同一班人。
    mushanshitiancai
        3
    mushanshitiancai  
       2016-03-27 12:38:30 +08:00 via Android
    stl 是标准里的,编译器必须有实现, boost 则不是
    abscon
        4
    abscon  
       2016-03-27 12:52:01 +08:00 via iPhone   ❤️ 1
    谁说 boost 都要链接库了?大部分都是 header only ,只需要 include 。
    当然你得先有一份 boost 源码
    hardware
        5
    hardware  
       2016-03-27 14:10:33 +08:00
    因为都在你的 ld path 里了
    gulucn
        6
    gulucn  
       2016-03-27 15:36:21 +08:00
    有一部分需要链接到库(如 thread),一部分不用
    Neveroldmilk
        7
    Neveroldmilk  
       2016-03-27 16:14:29 +08:00
    stl 的很多东西,只要是支持该标准的编译器,都默认内置实现了。 boost 都是自己搞起的,所以都要自己实现。
    bp0
        8
    bp0  
       2016-03-27 16:14:40 +08:00
    因为 STL 是 Standard Template Library ,而 BOOST 只是 BOOST 。

    当然 BOOST 中的一些内容已经被包含在 C++11 中了,但他还只是 BOOST 。
    seeker
        9
    seeker  
       2016-03-27 18:57:18 +08:00
    如果是 windows 东西都在 msvcr.dll 里面
    icenan2
        10
    icenan2  
       2016-03-27 19:12:29 +08:00
    首先 STL 全称叫“ Standard Template Library ”,只是一套模板库,是不能直接编译的。你使用时包含一个头文件,给模板传递类型参数,叫模板实例化。而 boost 里并不全是模板库,所以有些东西是可以编译成 lib 供你 link 的
    wizardoz
        11
    wizardoz  
       2016-03-28 13:13:43 +08:00
    跟是几伙人没有关系。
    因为 STL 是标准库,所以链接的时候默认都是包含的。
    而 BOOST 是第三方的,所以链接的时候不会默认包含,所以需要人为指定。
    araraloren
        12
    araraloren  
       2016-03-28 14:18:10 +08:00
    楼上的大多数就是没搞明白 stl , stl 本身是模板库,是不能做成动态库的,而因为大多数 stl 依赖的东西最多都是标准函数之类的,所以只要包含头文件就可以使用了,你使用`<thread>`试试,不还是要链接`pthread`库( linux 下)
    eliteYang
        13
    eliteYang  
       2016-03-30 16:05:54 +08:00
    1.windows 自己的链接库,本身就是在自己 IDE 的环境里
    2.STL 大多数都是 headonly 的,也就是说没有 cpp
    3.boost 的大多数库也是 headonly ,也是不需要 lib 库的,只是少数库需要链接库

    如果你比较纠结的话,建议直接用 C++11 14 标准
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:10 · PVG 10:10 · LAX 18:10 · JFK 21:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.