This question already has answers here:
Mixing cout and wcout in same program
(5个答案)
2年前关闭。
我正在使用这段代码,发现在成功调用之后该方法不会引发异常。如果我使用std :: cout一切都很好,并且会引发异常。我正在使用gcc版本4.9.2(Debian 4.9.2-10)。是gcc错误还是stl错误是代码问题还是其他问题?
这是ideone link to reproduce the lack of an exception with
(5个答案)
2年前关闭。
我正在使用这段代码,发现在成功调用之后该方法不会引发异常。如果我使用std :: cout一切都很好,并且会引发异常。我正在使用gcc版本4.9.2(Debian 4.9.2-10)。是gcc错误还是stl错误是代码问题还是其他问题?
// exceptions
#include <iostream>
using namespace std;
class C {
public:
string srch(int &i) {
if (i == 0) { //found
wcout << "got it: " << i << endl; return "i";
}
throw std::exception();
}
};
int main () {
C c = C();
int i = 2;
int j = 0;
try
{
c.srch(j);
c.srch(i);
}
catch (const std::exception &e) {
cout << "An exception occurred. Exception Nr. " << e.what() << '\n';
}
return 0;
}
这是ideone link to reproduce the lack of an exception with
wcout
.和a link reproducing the exception when cout
is used。 最佳答案
您的示例不能证明未引发异常。
不会显示catch块中的cout
消息,因为您已经使用wcout
并且在同一设备(stdout)上混合字符宽度为未定义行为。
将cout
更改为wcout
,您将看到引发了异常,只是没有看到预期的消息。
关于c++ - 此c++代码段的奇怪行为(std::wcout和std::exception),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45378135/
10-13 03:37