为什么程序结果在这两种情况下不同?
案例1)
cout<<"using cout.put(c): "<<cout.put(c);
cout.put('!');
案例2)
cout<<"using cout.put(c): ";
cout.put(c);
cout.put('!');
案例1)是: 使用cout.put(c):0x477864!
案例2)是: 使用cout.put(c):U!
答案 0 :(得分:3)
详细说明其他人所说的:在案例1中,编译器
将尝试为返回值找到<<
运算符
cout.put(c)
,并使用它。 cout.put(c)
返回
一个std::ostream&
,没有<<
,但有一个
std::ostream
将隐式转换为bool
(C ++ 11)或
a void*
(早期的C ++)。因此,您<<
致电void*
(从你的输出来判断)。
另请注意,在cout.put(c)
内调用<<
时
表达式是未指定的(除了它必须在之前
void*
的{{1}}。所以你很容易就会得到:
Uusing cout.put(c): 0x477864!
或
using cout.put(c): U0x477864!
(因为<<
实际上是函数调用,它引入了
排序,我不认为任何其他组合是可能的。)
一般情况下,只要你有一个<<
的序列,就可以期待
无论任何一方,要输出的右侧的值
表达可能有的影响。你打电话给cout.put(c)
它的副作用,而不是它的价值,所以你不应该使用它
一个<<
。 (要输出序列中的单个字符,只需使用
<< c
。)
答案 1 :(得分:1)
cout.put(c)
返回对cout
对象的引用。在第一种情况下,您打印该对象。