3

C++ クラスの例外を理解しようとしていますが、このプログラムについて理解できないことがあります。例外でオブジェクトが作成されないのはなぜですか? クラス名とパラメータのみが提供されるのはなぜですか?

ここ:throw( testing ("testing this message"));

#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;


class testing: public runtime_error
{
public:
  testing(const string &message)
    :runtime_error(message) {}
};

int main()
{
  try {
    throw( testing ("testing this message"));
  }
  catch (runtime_error &exception) {
    cerr << exception.what() << endl;
  }
  return 0;
}
4

1 に答える 1

4

一時testingオブジェクトを作成しています。名前がないため、構文が少しおかしいように見えます。が表示されることを期待していましたtesting myObj("Testing this message");が、変数名がなくても同じ結果が得られます。

コンストラクターにブレークポイントを配置するtestingと、実際にオブジェクトを作成していることがわかります。作成したスコープに名前がありません。

これは、さまざまな場所で実行できます ( throwreturn、および関数の引数として)...

return std::vector<int>(); // return an empty vector of ints

func(MyClass(1, 2, 3)); // passing `func` a `MyClass` constructed with the arguments 1, 2, and 3
于 2012-08-20T01:30:10.663 に答える