c++ operator<<(char) 但出入 hexa/int
c++ operator<<(char) but out but in hexa/int
为什么三个运算符<<的输出方式不同?
#include <iostream>
#include <string>
using namespace std;
int main()
{
operator<<(cout, "Hello").operator<<('w').operator<<(endl); // Hello119
cout << (void *)'w' << endl; // 0x77
cout << 'w'; // w
operator<<(operator<<(cout, "Hello"), 'w').operator<<(endl); // Hellow !!!
}
第一个带有 2 个参数的运算符 << 按预期给出了正确的字符串输出,而其他运算符则没有...
有人可以向我解释一下吗?
更多信息:
cout << "Hello" << 'w' << endl;
将被解释为...
operator<<(operator<<(cout, "Hello"), 'w').operator<<(endl); // Hellow
您正在强制转换为 void
指针,并且 std::ostream& operator<<(std::ostream&,void*);
有专门化,因此您得到的输出是十六进制值而不是十进制值。
注:0x77 == 119
另请注意:
您正在此处调用 std::ostream::operator<<()
成员运算符重载:
operator<<(cout, "Hello").operator<<('w').operator<<(endl);
// ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
// | |
// | + Calls the std::ostream::operator<<() member operator
// + Calls the std::ostream& operator(std::ostream, T) global overload
char
没有重载,因此隐式转换为 int
,数值 119
出现在输出中。
来自 std::ostream::operator<<()
成员函数的上述链接参考:
正如你在评论中提到的
std::cout << 'w' << 'w' << 'w' << std::endl;
将被推断为全局 std::ostream& operator<<(std:: ostream&, T)
重载的链式调用:
operator<<(operator<<(operator<<(operator<<(std::cout,'w'),'w'),'w'),std::endl);
为什么三个运算符<<的输出方式不同?
#include <iostream>
#include <string>
using namespace std;
int main()
{
operator<<(cout, "Hello").operator<<('w').operator<<(endl); // Hello119
cout << (void *)'w' << endl; // 0x77
cout << 'w'; // w
operator<<(operator<<(cout, "Hello"), 'w').operator<<(endl); // Hellow !!!
}
第一个带有 2 个参数的运算符 << 按预期给出了正确的字符串输出,而其他运算符则没有...
有人可以向我解释一下吗?
更多信息:
cout << "Hello" << 'w' << endl;
将被解释为...
operator<<(operator<<(cout, "Hello"), 'w').operator<<(endl); // Hellow
您正在强制转换为 void
指针,并且 std::ostream& operator<<(std::ostream&,void*);
有专门化,因此您得到的输出是十六进制值而不是十进制值。
注:0x77 == 119
另请注意:
您正在此处调用 std::ostream::operator<<()
成员运算符重载:
operator<<(cout, "Hello").operator<<('w').operator<<(endl);
// ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
// | |
// | + Calls the std::ostream::operator<<() member operator
// + Calls the std::ostream& operator(std::ostream, T) global overload
char
没有重载,因此隐式转换为 int
,数值 119
出现在输出中。
来自 std::ostream::operator<<()
成员函数的上述链接参考:
std::cout << 'w' << 'w' << 'w' << std::endl;
将被推断为全局 std::ostream& operator<<(std:: ostream&, T)
重载的链式调用:
operator<<(operator<<(operator<<(operator<<(std::cout,'w'),'w'),'w'),std::endl);