Как преобразовать в char* из const string& и из const char*

У меня есть класс String.

Класс String выглядит так:

class String {
private: 
  char* string;
  size_t size;
public:
  String() {}
  String(const std::string&);
  String(const char*);
  

И в этом классе есть 2 конструктора.

  • String (const string&);
  • String (const char*);

Они должны записать полученные данные в переменную string в поле private.

Возможно ли вообще такое преобразование? Или стоит поменять реализацию класса?

(Такой класс дан по заданию)


Ответы (1 шт):

Автор решения: Nikita

Как отметил @KoVadim, можно воспользоваться strdup(), но стоит обратить внимание на то, что strdup() не соответствует ANSI C из-за чего некоторые компиляторы отказываются его использовать, склоняясь к использованию _strdup().

Для конвертации типов можно воспользоваться const_cast или старым сишным приведением.

char* foo(const char* ch) {
    return const_cast<char*>(ch);
} 

или

char* foo(const char* ch) {
    return (char*)ch;
}

Таким образом можно привести и std::string к char* с помощью метода c_str().

int main(int argc, char* argv)
{
    char* ch1;
    char* ch;

    std::string str = "std::string text";
    const char* c_ch = "const char text";

    ch1 = foo(str.c_str());
    ch = foo(c_ch);

    std::cout << ch1 << "\n";
    std::cout << ch;
    return 0;
}

Вывод:

std::string text

const char text

→ Ссылка