なぜswitch文は文字列に適用できないのでしょうか? 質問する

なぜswitch文は文字列に適用できないのでしょうか? 質問する

次のコードをコンパイルすると、エラー メッセージが表示されますtype illegal

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

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

ベストアンサー1

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

switch ステートメントのコードを生成するには、コンパイラーは 2 つの値が等しいことの意味を理解する必要があります。int や enum などの項目の場合、これは単純なビット比較です。しかし、コンパイラーは 2 つの文字列値をどのように比較すればよいのでしょうか。大文字と小文字を区別するか、区別しないか、カルチャを認識するかなど... 文字列を完全に認識しないと、正確に答えることはできません。

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

おすすめ記事