gpt4 book ai didi

c++ - 重载运算符<<(unsigned char typedef as byte)

转载 作者:可可西里 更新时间:2023-11-01 15:47:52 26 4
gpt4 key购买 nike

我想重载(劫持?)ostreambasic_ostream<unsigned char>以便它停止尝试将八位字节(无符号字符)显示为可打印字符。

我一直住在cout和 friend 们在屏幕上放笑脸的时间太长了。我厌倦了与 Actor 一起工作:hex << int(0xFF & b) << ... .

是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。

最佳答案

问题是已经有一个

template<class charT, class traits>
std::basic_ostream<charT,traits>&
operator<<(std::basic_ostream<charT,traits>&, charT);

namespace std .自 basic_ostream<>也在这个命名空间中,ADL 在你输出 unsigned char 时选择它.添加您自己的重载可能会使调用运算符变得模棱两可,或者您的重载将被默默地忽略。

但即使它能工作,它也会很脆弱,因为忘记一个包含可能会在编译器没有任何诊断的情况下巧妙地改变代码的含义。
还有更多:每个查看此类代码的维护程序员都会假设调用了标准运算符(并且在向代码添加另一个输出语句时永远不会考虑添加 include)。
简而言之,最好添加一个函数来执行您想要执行的操作。

一个合理的语义替代方案可能是添加一个流操纵器来调用您想要的输出格式。不过,我不确定这在技术上是否可行。

关于c++ - 重载运算符<<(unsigned char typedef as byte),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065734/

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