大佬们请教个问题,为什么void*可以阻止转换
c吧
全部回复
仅看楼主
level 1
没有腹肌 楼主
int i = 42; cin << i;
因为 istream 本身并没有定义 <<,所以本来代码应该产生错误。然而,该代码能使用 istream 的 bool类型转换运算符 将 cin 转换成 bool ,而这个 bool值 接着会被提升成 int 并用作内置的左移运算符的左侧运算对象。这样一来,提升后的 bool值(1或0) 最终会 被左移42个位置。
标准库的早期版本中,IO类型定义了向void*的转换规则,以求避免上述问题。
在C++11标准中,IO标准库通过定义一个向bool的显式类型转换实现同样的目的。
2022年12月18日 11点12分 1
level 1
没有腹肌 楼主
实际代码也不成问题
2022年12月18日 11点12分 2
level 1
你找到答案了吗?
2022年12月22日 02点12分 3
level 14
2022年12月22日 05点12分 4
1