gpt4 book ai didi

c++ - 使用 rdbuf()->sputn(...) 与运算符<<

转载 作者:太空狗 更新时间:2023-10-29 23:07:14 25 4
gpt4 key购买 nike

我正在查看一些遗留代码,发现临时的 std::string在整个代码中大量使用对象来转换 const char*强制使用:

inline std::ostream & operator << (std::ostream & s, const std::string & str)

其中str.c_str()用于实现对

的调用
template<class _Traits> inline
basic_ostream<char, _Traits>& __CLRCALL_OR_CDECL operator<<(
basic_ostream<char, _Traits>& _Ostr,
const char *_Val)

奇怪的是,我认为这样做是因为有人创建了一个 const char* 插入运算符,它会递归...无论如何,原因在遥远的过去已经消失了...当我注意到正在发生的事情并且一切正常时,我删除了它(据我所知)。

在试验这个问题时,我重新定义了 operator<<(std::ostream& , const char*)执行以下操作。

//
// Disclaimer - experiment!!! not enshrined in code.
//
inline std::ostream & operator << (std::ostream & s, const char * str)
{
//formerly return s << std::string(str);

if( str ) s.rdbuf()->sputn( str , strlen(str) );
return s;
}

问题除了strlen调用(抢占一些评论)绕过插入运算符有很多缺点吗? (我在绕过的运算符中看到了一些 try catch 逻辑,也许我可以将其放入上面的运算符中。)

最佳答案

流插入器执行格式化 输入,由流对象中的两个标志控制。将字符直接填充到输出缓冲区会绕过这种格式设置,因此像 setw 这样的操纵器不会影响输出。

关于c++ - 使用 rdbuf()->sputn(...) 与运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com