首先,无论是 const 引用还是 value 都不会改变任何东西。
然后,您必须考虑函数的期望。一个函数可以用 achar*或 a做不同的事情char const*——例如,原始版本memcpy使用了这些类型,并且可能仍然存在这样的代码。希望它很少见,在下文中,我将假设char*C 函数中的 引用'\0'
终止的字符串。
如果 C 函数采用,则可以将;char const*的结果传递给它 std::string::c_str()如果需要 a char*,则取决于。如果它char*只是因为它可以追溯到constC 的早期,而实际上它没有修改任何内容,那么在
std::string::c_str()后面加上 aconst_cast是合适的。但是,如果 C 函数将char*用作输出参数,事情就会变得更加困难。我个人更喜欢声明一个缓冲区
,传递它,char[]然后将结果转换为之后将字符串重新调整为结果长度(使用确定std::stringstd::stringstd::stringstd::string::resize()&s[0]strlen(s.c_str()),如有必要)也可以使用。
最后(但这也是使用 C 程序的问题
char[]),您必须考虑任何生命周期问题。大多数函数采用char*或char const*简单地使用指针,然后忘记它,但如果函数将指针保存在某处以供以后使用,则字符串对象必须至少存在一样长的时间,并且在此期间不应修改其大小。(同样,在这种情况下,我更喜欢使用char[].)