我想创建自己的字符串存储(类),我对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 *?
答案 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()
方法