我一直在我的代码中使用std :: string。我打算创建一个std :: string并通过引用传递它。但是,有人建议使用char *代替。移植代码时,关于std :: string的东西是不可靠的。真的吗?我已经避免使用char *,因为我需要为它做一些内存管理。相反,我发现使用std :: string更容易使用。
基本上我有一个10位数的输出,我存储在这个字符串中。 Atm,我不确定哪个更好用。
答案 0 :(得分:12)
std :: string是C ++标准的一部分,自1998年以来一直存在。它在所有当前的C ++编译器中都可用。确实没有可移植性的理由不使用它。如果你有一个需要使用C风格字符串的API,你可以使用std :: string的c_str()
成员从字符串中获取一个:
std::string s = "foo";
int n = strlen( s.c_str() );
答案 1 :(得分:1)
使用char *
您确定不会在图书馆之间出现可移植性问题
如果库导出使用std::string
的函数,则可能与另一个已链接到不同版本的标准库的库进行通信时出现问题。
答案 2 :(得分:1)
在C ++中,几乎每个字符串都应该是std :: string,除非另一个库需要cstring,在这种情况下你应该仍然使用std :: string并传递string.c_str(),除非你使用的函数是使用缓冲区。
但是,如果您正在编写库并导出函数,最好使用const char *参数而不是std :: string参数来实现可移植性。
答案 3 :(得分:1)
我认为除非你要向第三方提供一些API,否则没有什么可担心的。
只需使用std::string
答案 4 :(得分:0)
对于std::string
来说char *
并不存在问题,这也不是std::string
的问题。 char *
实际上在内部使用{{1}} ...
答案 5 :(得分:0)
字符串更好。在任何平台上都没有什么不可靠的。如果您担心传递大类,可以将字符串的const引用传递给函数。使编码更快,更容易出错。
答案 6 :(得分:0)
除了它更容易之外,std::string
可能会更有效率。它的小字符串优化可以保留std::string
对象本身的10位数,而不是将它们放在堆中的另一个内存块中。