我想创建自己的字符串存储(类(,我对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 *
我想在我的类中使用一些其他函数,并且还使用const char *
比char *
更快(非常快(大约 2 倍((来保存const char * param
内容。
现在我的问题:如果你想创建新的字符串存储,你使用const char *
还是char *
?
如果您的str_n
是可变的,请使用char *
。您错了,因为常量内容是可修改的。例如,这个:
const char *foo = "foo";
foo[0] = 'a';
不会编译。试图用const_cast来规避它不是一个可行的选择:
const_cast<char *>(foo)[0] = 'a';
因为它是未定义的行为,并且通常会崩溃,因为foo
被放入只读内存中。
因此,如果您的字符串是可变的,则必须复制示例中str
(构造函数的参数(的内容(您没有选择使用 const char *
作为存储,并省略副本以使程序更快 - 我想你的意思是"快 2 倍",因为你省略了副本(。
注意:你应该使用new
而不是malloc
,它更像c++(你不需要强制转换来char *
new char[...]
的结果(
只需使用std::string
class str_n {
public:
str_n(const char * str_in) : str{str_in} {}
private:
std::string str;
};
您可以使用 .c_str()
方法从C++字符串中获取 C 字符串