この簡単なサンプル プログラムを見てみましょう。
// main.cpp
#include <iostream>
#include <fstream>
int main(int argc, const char *argv[])
{
using namespace std;
fstream infile("main.cpp");
basic_streambuf<char> *buf = infile.rdbuf();
cout << static_cast<void *> (buf) << endl;
cout << buf;
}
オブジェクトの実際のアドレスを出力するために、basic_streambuf<>
明示的に にキャストする必要がありましたvoid *
。だから主な質問は、なぜC++はbasic_streambuf<>
ある種のように扱うのconst char *
ですか? なんらかの暗黙の変換が行われているのでしょうか、それともこれはどのような黒いブードゥー教ですか?
cplusplusやen.cppreferenceなどの通常のオンライン参照を確認しstd::basic_streambuf
ても、パブリック変換演算子が提供されていることは示されません。私が見落としているものはありますか?