1. ホーム
  2. c++

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

2022-02-17 09:36:35

質問

を持つクラスがあります。 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の正しさのためにプログラムに入れてください。しかし、あなたが見せてくれたコードは、このような非推奨の変換を行っていないので、問題ではありません。警告は他のところから来たのでしょう。