gpt4 book ai didi

c++ - 为什么第二条语句打印十六进制值

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:46 25 4
gpt4 key购买 nike

使用流运算符的 C++ 代码失败。我无法弄清楚为什么第二个打印“DEF”不起作用::

#include <iostream>
#include <sstream>
struct logger :public std::ostringstream {};

struct logger_flush {};

logger_flush endl;

std::ostream& operator << (std::ostream& os, const logger_flush& lf) {
logger& oss = dynamic_cast<logger&>(os);
std::cout << oss.str() << std::endl;
}

int main()
{
logger() << 100 << "ABC?" << endl;
logger() << "DEF" << endl;
}

输出是:

100ABC?

0x40168d

最佳答案

logger()是一个右值,这就是为什么 ::operator<<(logger(), "DEF")你想要的电话不起作用:operator<< 的重载采用左值引用参数,右值不能绑定(bind)到非常量左值引用。

但是,右值类确实允许调用方法,因此重载 logger().operator<<((void*)"DEF")可用,它成为 logger() << "DEF" 的最佳匹配.

适用于 logger() << 100 << "ABC?" << endl;因为logger() << 100返回一个左值引用,然后该左值引用是 ::operator<< 的有效参数.

关于c++ - 为什么第二条语句打印十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908187/

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