2

私は興味があります:

bool State::operator<(const State* S)
{
  return this->operator<(*dynamic_cast<const State *>(S));
}

以下とまったく同じ:

bool State::operator<(const State* S)
{
  return this->operator<(*(S));
}

参考までthis->operator<に、呼び出されるのは次のとおりです。

bool State::operator<(const State& S)
{
  return this->reward < S.reward ? true : false;
}

どちらがより「正しい」タイプで安全に使用できますか、実際の違いはありますか?

4

2 に答える 2

3

いいえ、最初のものはポインターをそれ自体にキャストしますが、実際には何もしません。次に、const State*オーバーロードを呼び出します。これにより、無限ループが発生します。dynamic_cast実行時にダウンキャストする必要があるまでは必要ありません— ここではダウンキャストはありません。

return this->operator<(*S);

するだけです。

于 2011-07-12T17:08:53.837 に答える
1

タイプミスがあり、これを比較するつもりであると仮定します。

*dynamic_cast<const State *>(s)

...これに:

*s

... s にはコンパイル時の typeconst State *がありますが、まったく違いはありません。

コンパイラがコンパイル時に同等であることに気付かない場合、前者はわずかに遅くなる可能性があります。

これを読んだ人は、あなたが何を考えているのか疑問に思うだろうという理由で、私は前者を避けます.

于 2011-07-12T17:13:05.460 に答える