1

この簡単なサンプル プログラムを見てみましょう。

// 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 *ですか? なんらかの暗黙の変換が行われているのでしょうか、それともこれはどのような黒いブードゥー教ですか?

cplusplusen.cppreferenceなどの通常のオンライン参照を確認しstd::basic_streambufても、パブリック変換演算子が提供されていることは示されません。私が見落としているものはありますか?

4

1 に答える 1

2

http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

ostream& operator<< (streambuf* sb );

Retrieves as many characters as possible from the input sequence controlled by the stream buffer object pointed by sb (if any) and inserts them into the stream, until either the input sequence is exhausted or the function fails to insert into the stream.

http://www.cplusplus.com/reference/streambuf/streambuf/

It is an instantiation of basic_streambuf with the following template parameters: charT = char

于 2013-08-14T01:01:15.377 に答える