我一直在玩错误处理,并编写了一个简短的程序来尝试理解异常处理。我编写了以下程序,用户输入一个数字,程序捕获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与使用终端的编译有什么区别?任何帮助将不胜感激!
答案 0 :(得分:1)
这似乎是libc ++中的一个错误。
从Xcode编译时,默认设置是使用与libc ++的clang。而g ++使用libstdc ++。在Xcode中将库设置为libstdc ++会导致抛出异常。