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 中编译了代码,但是在给出字符串时没有抛出异常。但是,当我使用终端和命令编译它时g++ main.cpp -Wall -Wextra -o program,一切正常。发生了什么,在 Xcode 中编译与使用终端编译有什么区别?任何帮助将不胜感激!

4

1 回答 1

1

这似乎是 libc++ 中的一个错误。

从 Xcode 编译时,默认设置是使用带有 libc++ 的 clang。而 g++ 使用 libstdc++。在 Xcode 中将 library 设置为 libstdc++ 会导致抛出异常。

于 2012-12-06T16:04:38.853 回答