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
更有可能匹配,尽管可能存在变化(两个指针或指针和大小)。调试版本可能有一些额外的信息。
我认为从另一个编译器或其他语言(如 C#)发送指向动态加载库的指针/引用是不可能的或非常危险的。我想找到证明,但 C++ 标准文档非常庞大。
我认为空终止字符串可以正常工作,但是 std::string 或者 string_view 怎么样?
C++ 没有标准化 ABI。
在实践中,不同的 std::string
实现可能采用不同调整的小字符串优化(具有不同的缓冲区大小),或者不使用小字符串优化。它们也可能有不同的字段顺序。此外,std::allocator
从不同的实现中默认分配 std:;string
可能会使用不同的竞技场。
std::string_view
更有可能匹配,尽管可能存在变化(两个指针或指针和大小)。调试版本可能有一些额外的信息。