我有一个简单的函数,它接受一个字符并返回一个字符串,在 C 中它看起来像;
char* get_string(char c) {
switch(c) {
case 'A': return "some string";
Case 'B': return "some other string";
...
它工作正常,但后来我希望我的代码在 C++ 中工作,而 C++ 编译器抛出大量“不推荐使用的从字符串常量到‘char*’的转换”。我理解这个警告,但我不是 100% 确定什么是实现该函数的最佳方法,以便它可以在 C 和 C++ 上快速运行。这个函数被调用了很多,这是一个重要的瓶颈,所以它必须要快。我最好的尝试是;
char* get_string(char c) {
char* str = (char*)malloc(50);
switch(c) {
case 'A':
sprintf(str, "some string");
return str;
Case 'B':
sprintf(str, "some other string");
return str;
...
最佳答案
返回 const char*
而不是 char*
。此上下文中的 const
表示“此指针指向一个常量指针”——换句话说,调用者无法修改返回的字符串。这允许编译器将字符串放在某个内存位置,以便 get_string()
函数可以只返回这些字符串的地址。如果调用者需要修改返回的字符串,他们可以分配自己的缓冲区并复制它(最好通过 std::string
)。
const char* get_string(char c) {
switch(c) {
case 'A': return "some string";
case 'B': return "some other string";
...
关于C++:返回 C 字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3323675/