c – 为什么写入临时流失败?

c – 为什么写入临时流失败?,第1张

概述请考虑以下代码: #include <sstream>#include <iostream>class Foo : public std::stringstream {public: ~Foo() { std::cout << str(); }};int main(){ Foo foo; foo << "Test1" << std::endl; F 请考虑以下代码:
#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 – 为什么写入临时流失败?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1242853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存