我的问题很简单:
我应该使用char数组,例如:
char *buf, buf2[MAX_STRING_LENGTH]
etc或者我应该在一个库中使用std :: string,这些库将被其他程序员使用,他们可以在他们选择的任何SO和编译器上使用它吗?
考虑性能和便携性......
从我的角度来看,std字符串更容易,性能相同或者差别太小而不能使用std:string,关于可移植性我不知道。我想因为它是标准的,所以不应该有任何编译器在没有它的情况下编译C ++,至少是任何重要的编译器。
编辑:
该库将在3个主要操作系统上编译,理论上将作为lib分发
你的想法?
TY,
乔
答案 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