C++需要从常量字符串转换的解决方案

C++ Need Solution for converting from const string

本文关键字:转换 解决方案 字符串 常量 C++      更新时间:2023-10-16

我有一个(小)问题。我打算用C++编写一个小字符串类,它应该允许您以与 C# 中的字符串相同的方式使用字符串。

我写了下面的类:

class STRING
{
private:
  char * data;
  int length;
public:
  STRING();
  STRING(char * data);
  //string(char[] data, int length);
  void setData(char * data);
  int Length();
  char * toString();

  STRING operator = (STRING data);
  STRING operator = (char * data);
  STRING operator = (char data);
  STRING operator = (const string data);
  STRING operator + (STRING data);
  friend ostream& operator<<(ostream&os, const STRING& data);

  void display();

};

它正在工作。但我有一个问题。如果我尝试启动类的新对象并想用如下值设置它:

STRING test1;
test1 = "TEST";

编译器给我以下警告:
警告:已弃用从字符串常量到"char*"的转换[-Wwrite-strings] test1 = "TEST";

所以我尝试以操作重载的形式获得解决方案。我试过这个:

  STRING STRING::operator = (const string data)
  {
     char * tmp;
     int laenge;
     tmp = (char *) data
     laenge = strlen(tmp);
     this->data = new char[laenge + 1];
     this->length = laenge;
     strcpy(this->data, tmp);
  }

但它不起作用,我没有想法。当然,如果我通过以下方式启动它,它将起作用:

STRING test1;
test1 = (char *) "TEST";

但我的梦想是像这样使用它:字符串测试1; test1 = "TEST"; 或字符串测试1 = "测试";

你需要

一个需要const char*的重载

STRING STRING::operator = (const char* s)
{
    if (data != nullptr)
        delete [] data;
    length = strlen(s);
    data = new char[length + 1];
    strcpy(data, s);
}

你需要一个重载函数来const char*但你也可以使用一个更快的模板函数:

template<int length>
STRING STRING::operator = (const char (&s)[length])
{
    //resize or allocate data if needed
    strncpy(data, s, length);
}

您可以在以下函数中将参数类型从char*更改为char const*

STRING(char * data);
STRING operator = (char * data);

此外,作为一般改进的问题,您可以更改

STRING operator = (STRING data);
STRING operator = (const string data);
STRING operator + (STRING data);

STRING& operator = (STRING const& data);
STRING& operator = (const string& data);
STRING operator + (STRING const& data) const;

请参阅 http://en.cppreference.com/w/cpp/language/operators 为什么我建议的原型比您拥有的原型更合适。