【发布时间】:2011-01-27 11:51:13
【问题描述】:
以下代码来自here:
#include <streambuf> // for std::streambuf
#include <ostream> // for std::ostream
class fdoutbuf
: public std::streambuf
{
public:
explicit fdoutbuf( int fd );
//...
};
class fdostream
: public std::ostream
{
protected:
fdoutbuf buf;
public:
explicit fdostream( int fd )
: buf( fd ), std::ostream( &buf ) // This is not allowed.
// buf can't be initialized before std::ostream.
{}
//...
};
我真的不明白这个评论。为什么“不能在std::ostream之前初始化buf”?我可以使用一些帮助来理解这一点吗?
【问题讨论】:
-
实际上,代码完全没问题,只要基类构造函数(在这种情况下
std::ostream(std::streambuf* buf_ptr)不访问 buf 对象(又名*buf_ptr)。&buf确实正确指向内存)稍后将构造buf的地址,因为this指针在成员初始化器列表中已经有效。
标签: c++ idioms ostream initialization-list