1. ホーム
  2. c++

[解決済み] C++で文字列定数から「char*」への変換が非推奨に

2022-03-11 04:58:44

質問

を持つクラスがあります。 private char str[256];

で、そのために明示的なコンストラクタを持っています。

explicit myClass(const char *func)
{
    strcpy(str,func);
}

として呼んでいます。

myClass obj("example");

これをコンパイルすると、次のような警告が表示されます。

文字列定数から 'char*' への非推奨の変換。

なぜこのようなことが起こるのでしょうか?

どうすればいいですか?

これは、次のような状況になったときに表示されるエラーメッセージです。

char* pointer_to_nonconst = "string literal";

なぜか?CとC++では、文字列リテラルの型が異なります。Cではcharの配列で、C++では 定数 の配列です。いずれにせよ、文字列リテラルの文字を変更することは許されないので、C++のconstは制限というより、型安全性のためのものです。からの変換は const char* から char* は、安全上の理由から、明示的にキャストしないと一般に不可能です。しかし、Cとの後方互換性のために、C++言語では、文字列リテラルを char* で、この変換が非推奨であることを警告してくれます。

ということは、どこかに1つ以上の const をconstの正しさのためにプログラムに入れてください。しかし、あなたが見せてくれたコードは、このような非推奨の変換を行っていないので、問題ではありません。警告は他のところから来たのでしょう。