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

C++ 使用const char*vs char创建自己的字符串*,c++,char,constants,c-strings,C++,Char,Constants,C Strings,我想创建自己的字符串存储(类),我对constchar*和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

我想创建自己的字符串存储(类),我对
constchar*
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*
作为我的
\u str
,我知道如果我使用
const char*
我需要将它复制到
char*
中,我想在我的类中使用一些其他函数,并且使用
const char*
更快(大约2倍))而不是
char*
来保存
const char*param
内容


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

如果你的
字符串是可变的,那么使用
char*
。你错了,常量内容是可修改的。例如,这:

const char *foo = "foo";
foo[0] = 'a';
不会编译。试图通过const_cast绕过它不是一个可行的选择:

const_cast<char *>(foo)[0] = 'a';
const_cast(foo)[0]=“a”;
因为它是未定义的行为,并且通常会崩溃,因为
foo
被放在只读内存中

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


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

只需使用
std::string

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

可以从C++字符串中获取C字符串,使用<代码> .cString()/Case>方法

简单:使用“代码> const <代码>如果在对象生命期间,该字段不打算以任何方式修改,如果不是,我们在程序中有更改!我听说const的更改没有问题(你可以更改内容,但不能更改指针),那么你为什么这么说呢?关注对象的生命周期。。。你的
stru\n
对象是可变的还是不可变的?如果没有,则使用
const
。100%是可变的,但正如我所说的,您也可以更改const内容!请注意,
memcpy
不转换任何内容…不,我不想使用字符串。。。我想做一些像绳子的东西@USEBase您的解决方案看起来是最优的,除非您想优化字符串类,只要记住添加析构函数并默认初始化指向
nullptr