this questionと答えると、私は本当に私を混乱させる研究をしました。演算子優先順位(boolより前のvoid *)
正常にオープンした2つのifstreamは同じではなく、2つのifstreamが失敗していることに気付きました。 最初に私はcplusplus.comをチェックしました。 operator !
はbadbitとfailbitのステータスを返します。私はこれとは逆のことが、まだこの2つのビットの状態を返すことになると思うが、反転したと思う。間違っ
- 二成功し呼び出しが等しくないからです。
それで、私はそれが何かを返すだろうoperator bool
だと考えました。だから私はifstreamからバックトラックしようとしてを返すistream::operator bool()
を見つけました。それでも、間違った
- しかし(2つの成功した呼び出しがまだ同じではないので、となることができませんでした)、これはまったく呼び出されていないようです。
私はアプローチを変更し、Visual Studioから逆アセンブリを確認しました。そして私は何を見つけるのですか?
if (file0 != file1) {
はoperator bool()
,とは呼ばず、operator void*()
(実際は__imp_std::ios_base::operator void *
)と呼ばれます。
ので
- 任意の
operator bool()
は、ポインタ値にキャストしようとする前に呼び出すことが見出されないなら、私がある持っている質問..? - それはいくつかですか
operator bool()
私はそれを逃したのですが、operator void*
と呼んでいますか? これは私が理解していない最適化ですか?
または私は実際に
void*
は、この比較においてbool
よりも一致でことを考えているC++ で完全に間違っているのですか?
ああ、そうです。ありがとう、私はここで私は疲れている感じている。私はこれについて質問をしています:)多分あなたは[this one](http://stackoverflow.com/q/4294873/238902 "operator void *とoperator boolの両方を定義する")と答えることができます。 – Default
しかし、ifstreamは実際にoperator!=ではなくoperator *を呼び出しています。 – Default