在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());
}
是不是真的以某种方式引入算法,但两个版本之间有什么不同?
是的默认库在具有不同编译器的不同系统上有所不同。如果使用某个功能,请包含相应的标题。在Mac上,反向函数似乎包含在字符串标题的深处。使用#include <algorithm>
它也应该适用于其他系统。
Mac OS上的默认标准库是libc ++。 Ubuntu上的默认标准库是libstdc ++。
您可以通过将-stdlib=libc++
传递给编译器来尝试Ubuntu,看看会发生什么。
不同的是(我怀疑,但不确定)在libc ++上qazxswpoi是命名空间std中的一个类型,因此发生ADL查找,但在libstdc ++中,迭代器只是string::iterator
,并且因为它们不存在于命名空间std中,在该命名空间中没有查找。