这段c ++代码的奇怪行为(std :: wcout和std :: exception)

时间:2017-07-28 16:15:30

标签: c++ c++11 exception gcc std

我正在使用这段代码,我发现该方法在成功调用后不会抛出异常。如果我使用std :: cout一切都很好,抛出异常。我正在使用gcc版本4.9.2(Debian 4.9.2-10)。它是一个gcc bug或stl bug代码问题还是其他什么?

// 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

1 个答案:

答案 0 :(得分:2)

您的示例没有证明没有抛出异常。

未显示catch块中的cout消息,因为您已使用wcout并且在同一设备(stdout)上混合字符宽度为未定义行为。

cout更改为wcout,您将看到 被抛出的异常,您只是没有看到预期的消息。