#include <sstream>#include <iostream>class Foo : public std::stringstream {public: ~Foo() { std::cout << @R_404_5742@; }};int main(){ Foo foo; foo << "Test1" << std::endl; Foo() << "Test2" << std::endl; return 0;}
当我执行此 *** 作时,它给了我:
004177FCTest1
我不明白为什么第二个例子给我带来胡言乱语.临时应该存在直到整个表达式被评估,那么为什么它与第一个例子的行为不一样?
解决方法 我测试了它.我可以猜到那个运算符<<不能将临时绑定到非const引用,因此任何外部定义的运算符<<函数将无法在Foo临时函数上运行,但是如果ostream或ostringstream具有任何内部运算符<<成员他们会工作. 因此,指针的重载可能是成员函数,而const char *的特殊函数是外部声明的. 非临时可以绑定到非const引用以获得更专业的重载. 如果你真的需要这个,你可以使用包装器解决
class Foo :{ mutable std::ostringstream oss;public: ~Foo() { std::cout << oss.@R_404_5742@; } template<typename T> std::ostream& operator<<( const T& t ) const { return oss << t; }};
经过测试和工作.第一个运算符<<将返回您的基础流. 我也尝试了这个但是它已经减少了:
class Foo : std::ostringstream{ Foo & nonconstref;public: Foo() : nonconstref( *this ) {} ~Foo() { std::cout << @R_404_5742@; } template<typename T> std::ostream& operator<<( const T& t ) const { return nonconstref << t; }};
这也有效:
class Foo : public std::ostringstream{public: Foo() {} ~Foo() { std::cout << @R_404_5742@; } Foo& ncref() { return *this; }};int main(){ Foo foo; foo << "Test1" << std::endl; Foo().ncref() << "Test2" << std::endl;}总结
以上是内存溢出为你收集整理的c – 为什么写入临时流失败?全部内容,希望文章能够帮你解决c – 为什么写入临时流失败?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)