c++ std::string 在不同的编译器和标准库之间是否二进制兼容?

Does c++ std::string are binary compatible between different compilers and std libraries?

我认为从另一个编译器或其他语言(如 C#)发送指向动态加载库的指针/引用是不可能的或非常危险的。我想找到证明,但 C++ 标准文档非常庞大。

我认为空终止字符串可以正常工作,但是 std::string 或者 string_view 怎么样?

C++ 没有标准化 ABI。

在实践中,不同的 std::string 实现可能采用不同调整的小字符串优化(具有不同的缓冲区大小),或者不使用小字符串优化。它们也可能有不同的字段顺序。此外,std::allocator 从不同的实现中默认分配 std:;string 可能会使用不同的竞技场。

std::string_view 更有可能匹配,尽管可能存在变化(两个指针或指针和大小)。调试版本可能有一些额外的信息。