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