C++从 'const char*' 到 char* 的无效转换*

  • 本文关键字:char 无效 转换 C++ const c++
  • 更新时间 :
  • 英文 :


我是C++的新手。我有一个关于constchar*参数构造函数的练习。

class Book
{
private: 
char* title;
}
public:
Book (const char* title)
{
this->title = title;
} 

当我这样编写构造函数时,我收到错误无法将const char转换为char*。我试着用strcpy(this->title, title);然后,它运行了,但我没有得到预期的结果。有人能帮我吗。非常感谢。

你正在做一个练习,你所学的课程没有解释你应该做什么吗?

我想这是动态内存分配中的一个练习,您需要做的是在分配了一些内存后使用strcpy,这样您就有地方可以将字符串复制到其中

this->title = new char[strlen(title) + 1];
strcpy(this->title, title);

您需要额外分配一个字符,因为C风格的字符串以一个额外的nul字节结束。

但是,任何一个真正这样做的C++程序员(而不是一个学习练习(都会像paxdiablo所说的那样使用std::string

C++不允许您轻松地将const char *更改为char *,因为后者对如何更改该指针后面的数据没有任何限制。

如果使用C++,则应尽可能避免使用char *(遗留C(字符串。如果必须的话,可以将它们作为参数,但应该尽早将它们转换为C++字符串:

class Book {
private: 
std::string m_title;
public:
Book (const char *title) {
m_title = title;
}
};

不想成为的一件事是C++开发人员,这个奇怪的品种从未完全从C跨越到C++思维方式:-(


事实上,如果一本书的标题永远不会改变,你最好让它保持不变并初始化它,而不是分配给它,比如:

#include <iostream>
#include <string>
class Book {
public:
Book (const char* title): m_title(title) {};
void Dump() { std::cout << m_title << "n"; }
private:
const std::string m_title;
};
int main() {
Book xyzzy("plugh");
xyzzy.Dump();
}

最新更新