C++:返回 C 字符串的最快方法

标签 c++ c performance

我有一个简单的函数,它接受一个字符并返回一个字符串,在 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/

相关文章:

android - Android中listview和view.addView的区别

javascript - 缩小 JS/CSS 文件

Mysql/Mysqli/PDO 性能 - 我打印的表或表的数量

c++ - 错误 : multiple definition of constructor

c++ - 创建完整图的更快方法?

c++ - const int&和int&有什么区别

c++ - C/C++ 中的常量

c++ - 在 SFML 2.4 中使用碰撞检测来增加游戏分数的问题

c - 在顶层理解 "' const',这可能会在不提高 const 正确性的情况下降低代码可读性”

你能在堆栈上定义一个数组并将指针传递给全局变量吗?