1. ホーム
  2. c++

[解決済み】C++ 非推奨の文字列定数から「char*」への変換について

2022-01-18 15:48:17

質問

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