使用 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 字符串
我想创建自己的字符串存储 (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 字符串