公共库的 char 或 std::string 数组?

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

我的问题很简单:
我应该使用字符数组例如:

char *buf, buf2[MAX_STRING_LENGTH]  

等等,或者我应该在其他程序员使用的库中使用 std::string ,他们可以在他们选择的任何 SO 和编译器上使用它?

考虑性能和便携性...

从我的角度来看,std 字符串更容易,性能相同,或者差异太小而不能不使用 std:string,关于可移植性我不知道。我想因为它是标准的,所以不应该有任何编译器在没有它的情况下编译 C++,至少不应该有任何重要的编译器。

编辑:
该库将在 3 个主要操作系统上编译,理论上,作为库分发

你的想法?

c++ string char standards
5个回答
5
投票

取决于该库如何与客户端代码结合使用。如果它将动态链接,并且您有一组为客户端公开的 API,那么您最好使用以 null 结尾的字节字符串(即

char *
)及其宽字符对应项。如果您正在讨论在代码中使用它们,那么您当然可以自由使用
std::string
。如果它将包含在源代码形式中 -
std::string
效果很好。


3
投票

但是,如果您的库作为 DLL 提供,您的用户将必须使用 std::string 的相同实现。如果您的库是使用 Microsoft STL 构建的,他们将无法使用 STLPort(或任何其他实现)。


2
投票

只要您的库的目标是纯 C++,使用 std::string 就很好,甚至是可取的。 但是,这样做会将您与 C++ 的特定实现(用于构建库的实现)联系起来,并且它无法与其他 C++ 实现或其他语言链接。

通常,非常希望为库提供 C 接口而不是 C++ 接口。 这样,任何其他提供 C 外部函数接口的语言(这是其中的大多数)都可以使用它。 对于C接口,需要使用char *


1
投票

我建议只使用 std::string。此外,如果您希望与需要 C 风格字符串的库兼容(例如,使用 C 兼容 API),您始终可以使用 std::string 的 c_str() 方法。


0
投票

一般来说,使用 std::string 会更好,尤其是对于库内部的调用。

对于您的 API,它取决于其用途。 对于组织内的内部使用,使用 std::string 的 API 可能就可以了。 对于外部使用,您可能希望提供一个 C API,其中使用 char*

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