公共图书馆的char或std :: string数组?

时间:2009-12-07 17:32:34

标签: c++ string compiler-construction char standards

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

char *buf, buf2[MAX_STRING_LENGTH]  

etc或者我应该在一个库中使用std :: string,这些库将被其他程序员使用,他们可以在他们选择的任何SO和编译器上使用它吗?

考虑性能和便携性......

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

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

你的想法?

TY,

5 个答案:

答案 0 :(得分:5)

取决于此库如何与客户端代码一起使用。如果它将动态链接并且您为客户端公开了一组API - 最好使用空终止字节字符串(即char *)及其宽字符对应项。如果您正在谈论在代码中使用它们,您当然可以自由使用std::string。如果它将包含在源表单中 - std::string可以正常工作。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

一般情况下,最好使用std :: string,当然也适用于库内部的调用。

对于您的API,它取决于它的用途。对于组织内部使用,使用std :: string的API可能没问题。对于外部使用,您可能希望提供一个使用char *

的C API