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

时间:2017-06-22 09:43:47

标签: c++ char const c-strings

我想创建自己的字符串存储(类),我对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);
    }
};

我使用char *和const char *作为我的_str我知道如果我使用const char *我需要将它复制到char *我想在我的类中使用其他函数并使用const char * is比char *更快(非常快(约2x))来保存const char * param内容。

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

2 个答案:

答案 0 :(得分:1)

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

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

不会编译。尝试用const_cast来规避它是不可行的选择:

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

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

因此,如果您的字符串是可变的,那么必须复制示例中str(构造函数的参数)的内容(您不能选择使用const char *作为存储,并省略副本以使您的程序更快 - 我想你的意思是#2;快2倍&#34;因为你省略了副本。)

注意:您应该使用new代替malloc,更多是c ++ - ish(您不需要将char *转换为new char[...] TextView的结果}})

答案 1 :(得分:0)

只需使用std::string

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

您可以使用.c_str()方法

从C ++字符串中获取c字符串