次のコードをコンパイルすると、エラー メッセージが表示されます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文は通常次のように生成されます。ブランチテーブル文字列スタイルのスイッチのブランチ テーブルを生成するのはそれほど簡単ではありません。