1. ホーム
  2. c++

[解決済み】switch文が文字列に適用できない理由とは?

2022-03-31 09:43:59

質問

以下のコードをコンパイルすると、以下のエラーが発生します。 type illegal .

int main()
{
    // Compilation error - switch expression of type illegal
    switch(std::string("raj"))
    {
    case"sda":
    }
}

のどちらにも文字列を使用することはできません。 switch または case . なぜ?文字列でswitchするようなロジックをサポートするために、うまく機能するソリューションはありますか?

どのように解決するのですか?

その理由は、型システムに関係があります。 C/C++は、文字列を型としてサポートしていないのです。 定数char配列の考え方はサポートしていますが、文字列という概念を完全に理解しているわけではありません。

switch文のコードを生成するために、コンパイラは2つの値が等しいことの意味を理解する必要があります。 intやenumのような項目については、これは些細なビット比較である。 しかし、コンパイラは2つの文字列値をどのように比較すればよいのでしょうか。 大文字小文字を区別するか、しないか、文化を考慮するか、などなど・・・。 文字列を完全に認識しなければ、これは正確に答えることができない。

さらに、C/C++のswitch文は、通常、次のように生成されます。 ブランチテーブル . 文字列形式のスイッチのブランチテーブルを生成するのは、それほど簡単ではありません。