代码调用反向函数不能在Ubuntu 18上的g ++或clang ++上编译,但神秘地适用于mac osx

问题描述 投票:0回答:2

在Mac OSX上,clang版本7.0.2代码编译。在Ubuntu clang版本7.0.0上它没有。某些默认库真的有区别,这看起来很奇怪吗?

MWE:

#include <string>
using namespace std;
int main() {
    string A = "abc";
    reverse(A.begin(), A.end());
}

是不是真的以某种方式引入算法,但两个版本之间有什么不同?

c++ stl-algorithm
2个回答
4
投票

是的默认库在具有不同编译器的不同系统上有所不同。如果使用某个功能,请包含相应的标题。在Mac上,反向函数似乎包含在字符串标题的深处。使用#include <algorithm>它也应该适用于其他系统。


1
投票

Mac OS上的默认标准库是libc ++。 Ubuntu上的默认标准库是libstdc ++。

您可以通过将-stdlib=libc++传递给编译器来尝试Ubuntu,看看会发生什么。

不同的是(我怀疑,但不确定)在libc ++上qa​​zxswpoi是命名空间std中的一个类型,因此发生ADL查找,但在libstdc ++中,迭代器只是string::iterator,并且因为它们不存在于命名空间std中,在该命名空间中没有查找。

© www.soinside.com 2019 - 2024. All rights reserved.