使用 const char * 与 char * 创建自己的字符串
Create own string using const char * vs char *
我想创建自己的字符串存储(类(,我对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 字符串
相关文章:
- 没有为自己的结构调用列表推回方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- C++从对象自己的类中删除对象
- 使用 std::optional,而不是自己的结构
- 子轴围绕父轴而不是他自己的轴旋转
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 如何为自己的迭代器类从迭代器转换为const_iterator?
- 重载 + 自己的类和 std::string 的运算符
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何访问模板参数自己的模板参数?
- 将矩阵乘以我自己的输入的向量
- 您应该在什么时候创建自己的异常类型
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- 为什么strlen(s)与s的大小不同,为什么cout-char显示的是字符而不是数字
- string1 == string2 和你自己的 for 循环比较有什么区别?
- 使用 const char * 与 char * 创建自己的字符串