[解決済み】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文は、通常、次のように生成されます。 ブランチテーブル . 文字列形式のスイッチのブランチテーブルを生成するのは、それほど簡単ではありません。
関連
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み] JavaScriptで複数ケースを扱うSwitch文
-
[解決済み] switch文の複数ケース
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された