1

私はエラー処理をいじっており、例外処理を理解するための短いプログラムを作成しました。ユーザーが数値を入力し、プログラムがcinによってスローされた例外をキャッチする次のプログラムを作成しました。

#include <iostream>


int main()
{

    std::cin.exceptions(std::cin.failbit);
    int ReturnCode = 0;

    try{

        float Number;
        std::cout << "Number: \n";
        std::cin >> Number;
        std::cout << Number << "\n";

    }
    catch(...){

        std::cerr << "Input error \n";
        std::cin.clear();
        char BadInput[5];
        std::cin >> BadInput;
        ReturnCode = 1;
    };

    char StopChar;
    std::cout << "Press a key and enter: \n";
    std::cin >> StopChar;

    return ReturnCode;

}

Xcodeでコードをコンパイルしましたが、文字列が指定されても例外はスローされませんでした。ただし、terminalとコマンドを使用してコンパイルするとg++ main.cpp -Wall -Wextra -o program、すべて正常に機能しました。何が起こっているのですか、そしてXcodeでコンパイルすることとターミナルを使用することの違いは何ですか?どんな助けでも大歓迎です!

4

1 に答える 1

1

libc++ のバグのようです。

Xcode からコンパイルする場合、デフォルト設定は libc++ で clang を使用することです。一方、g++ は libstdc++ を使用します。Xcode でライブラリを libstdc++ に設定すると、例外がスローされます。

于 2012-12-06T16:04:38.853 に答える