使用 const char * 与 char * 创建自己的字符串

Create own string using const char * vs char *

我想创建自己的字符串存储 (class),我对 const char *char * 有所了解。

这是我来源的一部分:

class str_n
{
private:

    char * _str;

public:

    str_n(const char * str)
    {
          std::size_t Read_len = strlen(str);
          _str = (char *) malloc(Read_len + 1);
          memcpy(_str, str, Read_len + 1);
    }
};

我为我的 _str 使用了 char *const char * 我知道如果我使用 const char * 我需要在我想要的时候将它复制到 char *在我的 class 中使用一些其他功能并且使用 const char *char * 保存 const char * param 内容更快(非常快(大约 2 倍))。

现在我的问题是:如果你想创建新的字符串存储,你使用const char *char *?

如果您的 str_n 是可变的,请使用 char *。 const 内容是可修改的部分你错了。例如,这个:

const char *foo = "foo";
foo[0] = 'a';

不会编译。试图用 const_cast 规避它不是一个可行的选择:

const_cast<char *>(foo)[0] = 'a';

因为它是未定义的行为,并且通常会崩溃,因为 foo 被放在只读内存中。

因此,如果您的字符串是可变的,则您 必须 在您的示例中复制 str(构造函数的参数)的内容(您没有使用 const char * 作为存储的选项,并省略副本以使您的程序更快 - 我想你的意思是“快 2 倍”,因为你省略了副本)。

注意:你应该使用 new 而不是 malloc,它更像 c++(你不需要将 [=20 的结果转换为 char * =])

只需使用std::string

class str_n {
public:
    str_n(const char * str_in) : str{str_in} {}
private:
    std::string str;
};

您可以使用 .c_str() 方法从 C++ 字符串中获取 c 字符串