C++ 如何传递ostream对象?
我有一个这样的结构C++ 如何传递ostream对象?,c++,cout,ofstream,ostream,ampersand,C++,Cout,Ofstream,Ostream,Ampersand,我有一个这样的结构 struct X{ ostream out; X() : out(cout) {} ... }; 我注意到我必须定义out,并将cout作为默认参数正确传递:ostream&out;我不知道为什么,我也不知道是否还有其他可能在没有&的情况下保留ostream。此外,当我试图设置 X x; ofstream out; x.out = out; 编译器发现了许多错误。。。我希望能够将X::设置为cout或流。如何执行此操作?ostreams不能按值传递
struct X{
ostream out;
X() : out(cout) {}
...
};
我注意到我必须定义out,并将cout作为默认参数正确传递:ostream&out;我不知道为什么,我也不知道是否还有其他可能在没有&的情况下保留ostream。此外,当我试图设置
X x;
ofstream out;
x.out = out;
编译器发现了许多错误。。。我希望能够将X::设置为cout或流。如何执行此操作?ostreams不能按值传递。您必须通过引用或指针进行传递
如果您希望能够使
x.out
在其生命周期内引用不同的流,请将其设置为指针。否则将其作为引用。ostreams不能按值传递。您必须通过引用或指针进行传递
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
如果您希望能够使
x.out
在其生命周期内引用不同的流,请将其设置为指针。否则将其作为引用。ostreams不能按值传递。您必须通过引用或指针进行传递
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
如果您希望能够使
x.out
在其生命周期内引用不同的流,请将其设置为指针。否则将其作为引用。ostreams不能按值传递。您必须通过引用或指针进行传递
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
如果您希望能够使
x.out
在其生命周期内引用不同的流,请将其设置为指针。否则将其作为引用。流对象无法复制,您需要使用引用
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
无法复制流对象,需要使用引用
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
无法复制流对象,需要使用引用
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
无法复制流对象,需要使用引用
struct X{
ostream& out;
X() :out( std::cout ) {}
// X( ostream& out_ = std::cout ) : out( out_ ) {}
};
您可能能做的最好的事情是更改类设计,这样您就不需要再初始化成员变量了。编译器会阻止复制,基于指针的解决方案会带来所有权问题,
std::shared_ptr
会给std::cout
带来麻烦,引用成员会创建挂起引用的可能性
尝试重构代码,以便在需要时始终将流作为对外部方法的引用传递:
struct X{
X() {}
void f(std::ostream &os);
};
您可能能做的最好的事情是更改类设计,这样您就不需要再初始化成员变量了。编译器会阻止复制,基于指针的解决方案会带来所有权问题,
std::shared_ptr
会给std::cout
带来麻烦,引用成员会创建挂起引用的可能性
尝试重构代码,以便在需要时始终将流作为对外部方法的引用传递:
struct X{
X() {}
void f(std::ostream &os);
};
您可能能做的最好的事情是更改类设计,这样您就不需要再初始化成员变量了。编译器会阻止复制,基于指针的解决方案会带来所有权问题,
std::shared_ptr
会给std::cout
带来麻烦,引用成员会创建挂起引用的可能性
尝试重构代码,以便在需要时始终将流作为对外部方法的引用传递:
struct X{
X() {}
void f(std::ostream &os);
};
您可能能做的最好的事情是更改类设计,这样您就不需要再初始化成员变量了。编译器会阻止复制,基于指针的解决方案会带来所有权问题,
std::shared_ptr
会给std::cout
带来麻烦,引用成员会创建挂起引用的可能性
尝试重构代码,以便在需要时始终将流作为对外部方法的引用传递:
struct X{
X() {}
void f(std::ostream &os);
};
我想知道为什么。可以实现类似于共享ptr的复制和分配语义,不是吗?也就是说,所有副本都引用同一个fd并共享一个缓冲区,除非重新分配给。@PeterSchneider:好吧,您总是可以执行
std::shared_ptr
(这与直接执行此操作的流类有相同的问题)我想知道为什么。可以实现类似于共享ptr的复制和分配语义,不是吗?也就是说,所有副本都引用同一个fd并共享一个缓冲区,除非重新分配给。@PeterSchneider:好吧,您总是可以执行std::shared_ptr
(这与直接执行此操作的流类有相同的问题)我想知道为什么。可以实现类似于共享ptr的复制和分配语义,不是吗?也就是说,所有副本都引用同一个fd并共享一个缓冲区,除非重新分配给。@PeterSchneider:好吧,您总是可以执行std::shared_ptr
(这与直接执行此操作的流类有相同的问题)我想知道为什么。可以实现类似于共享ptr的复制和分配语义,不是吗?也就是说,所有副本都引用同一个fd并共享一个缓冲区,除非重新分配给。@PeterSchneider:好吧,你总是可以只做std::shared_ptr
(这与直接做这件事的流类有相同的问题)ostream
本质上是一个抽象基类,而且它不可复制(但可移动).ostream
本质上是一个抽象基类,而且不可复制(但可移动)。ostream
本质上是一个抽象基类,而且不可复制(但可移动)。ostream
本质上是一个抽象基类,而且不可复制(但可移动)。