J'ai le code suivantC++ opérateur << (void *)
#include <iostream>
#include <sstream>
class oTraceStream : public std::ostringstream
{
public :
oTraceStream(const int from, const unsigned int level)
: m_from(from)
, m_level(level)
{
}
virtual ~oTraceStream(void)
{
std::cout << str();
}
private :
// unused for this sample
int m_from;
unsigned int m_level;
};
int main(int argc, char* argv[])
{
oTraceStream(0,0) << "1st part " << " 2nd part" << std::endl;
{
oTraceStream tmp(0,0);
tmp << "1st part " << " 2nd part" << std::endl;
}
return 0;
}
Avec MS Visual 6.0 ou ancien gcc (2.x), les 2 sorties sont les mêmes.
1st part 2nd part
1st part 2nd part
Avec MS Visual 2008 ou récente gcc (4.x) la première chaîne de la première ligne est affichée en tant que pointeur
0x80493ec 2nd part
1st part 2nd part
que quelqu'un peut me expliquer pourquoi, cinque compilateur récemment la première ligne est affiché en utilisant ostream :: operator < < (const void * p) au lieu de ostream :: operator < < (const char *)?
qu'est-ce que 'str' ??? –
@LuchianGrigore standard 'std :: ostringstream :: str()' – Erbureth
Remarque: Les classes de flux telles que 'ostringstream' ne devraient pas être sous-classées. Seul 'streambuf' devrait. (Bien, vous pouvez faire des sous-classes analogues comme 'ostringstream' correspond à' stringbuf'.) – Potatoswatter