【发布时间】:2011-09-29 11:44:03
【问题描述】:
给定:
typedef struct { char val[SOME_FIXED_SIZE]; } AString;
typedef struct { unsigned char val[SOME_FIXED_SIZE]; } BString;
我想添加可用于AString 和BString 的ostream 运算符<<。
std::ostream & operator<<(std::ostream &out, const AString &str)
{
out.write(str.val, SOME_FIXED_SIZE);
return out;
}
如果我对BString 执行相同操作,编译器会抱怨invalid conversion from 'const unsigned char*' to 'const char*'。 ostream.write 没有 const unsigned char* 作为参数。
似乎<< 本身接受const unsigned char,所以我尝试这样的事情
std::ostream & operator<<(std::ostream &out, const BString &str)
{
for (int i=0; i<SOME_FIXED_SIZE; i++)
{
out<<str.val[i];
}
return out;
}
有人可以告诉我这是正确/好的做法还是有更好的方法? 欢迎任何cmets!
【问题讨论】:
-
我认为字符默认是无符号的。
-
@balki 这很大程度上取决于您的编译器设置;但总的来说,没有。
-
问题是,你用
BString做什么?如果您真的是指文本字符串,请使用char版本,一切都很好。如果您有任意二进制数据,那么仅打印到输出可能不会显示任何有意义的内容或破坏您的终端。那么为什么要麻烦两个字符串类呢? -
两个字符串类来自遗留代码。老实说,我不知道为什么。我会弄清楚并回来讨论这一点。
-
@balki:即使在您的平台上,
char是无符号类型,但它仍然不同于unsigned char。
标签: c++ operator-overloading ostream unsigned-char