c++ - 替换 Visual Studio 标准库

标签 c++ visual-studio stl

我在 Windows 上,假设我想为我的项目使用标准 C++ 库的不同实现 - 例如 libstdc++ 或 libc++。

  1. 有没有办法说服我的 Visual Studio 使用它而不是 MSVC 库,这样我仍然可以使用 #include <algorithm>而不是 #include <custom/algorithm>I believe我可以通过简单地将标题的路径添加到项目中来实现它,但我正在寻找更多“系统明智”的方式,所以我不会为每个项目重复它。
  2. 这真的值得麻烦吗 - 特别是在现代 C++ 功能可用/符合标准方面?
  3. 如果是这样,除了可能使用其他实现中不存在的某些功能外,这种替换有什么缺点?
  4. 特别是 this question 的答案提到可能与其他库存在兼容性问题 - 这仅适用于 Linux 世界,还是我在 Windows 上也会遇到问题?

注意:这主要是一个理论问题 - 我对 MSVC 库没问题,但我真的很想了解更多关于不同的 stdlib 实现的信息。

最佳答案

理论上,换出 stdlib 实现并非不可能。使用 clang,您可以在 libc++(clang 的)和 libstdc++(GCC 的)之间进行选择。

然而,在实践中,stdlib 实现通常从根本上与它们附带的编译器的内部联系在一起,尤其是当涉及到新添加的 C++ 功能时,对于许多编译器而言,这并不比 Visual Studio 更真实。

你能通过大量的黑客攻击让它工作吗?或许。值得吗?我很怀疑。即使你成功了,你也会牺牲一个可重现的构建环境,并且将依赖于一些非常黑暗的技术。您的项目将不可重复使用。

在您的问题中没有说明为什么您认为需要切换实现,但您可能想出的任何理由似乎都不值得麻烦。

关于c++ - 替换 Visual Studio 标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416704/

相关文章:

c++如何检查ostringstream是否为空

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - Visual Studio C++错误读取位置

c++ - 如何将 std::wstring 转换为数字类型(int、long、float)?

c++ - 可以替换 std::allocator 允许 std::set 使用 void* 和单独的复制/释放函数吗?

c++ - Q-learning学习扫雷行为

c++ - 如何仅使用 WinAPI (ATL/WTL) 在 WPF 中创建类似 Expander 控件的东西?

c# - 如何将大量文件放入 Visual Studio 中的命名空间?

c++ - 如何编写不立即将控制权释放给调用应用程序的 Windows 应用程序

c++ - 列出迭代段错误