gpt4 book ai didi

c++ - 如何将文字传递给重载运算符

转载 作者:行者123 更新时间:2023-11-30 02:26:10 24 4
gpt4 key购买 nike

我为特殊类型的登录应用程序重载了运算符:

CLogger * operator<<(CLogger *logger, QString &str)
{
if(logger != nullptr)
{
logger->getStream()->operator <<( str);
return logger;
}
else
return nullptr;
}

然后我尝试以这种方式通过此运算符传递参数:

&myLog  << "Hello";

myLog 是我的 CLogger 类的实例。我收到此错误:

invalid operands of types 'CLogger*' and 'const char [6]' to binary 'operator<<'
&myLog << "Hello";
^

但如果我以这种方式传递 QString 对象,一切都很好:

QString hi = "Hello";
&myLog << hi;

如何直接传递这个字符串文字?

最佳答案

您的问题是您的运算符采用了 QString &str,这是一个左值引用。左值引用要求您向它传递一个左值(命名对象)。所以在

&myLog  << "Hello";

"Hello" 不是命名的 Qstring,因此您无法绑定(bind)到它。您要做的是获取一个const QString &strconst& 可以绑定(bind)到一个临时的,它允许将 "Hello" 转换为一个临时的 Qsting 然后你可以绑定(bind)到那个临时的。

另一种选择是为 const char* 重载运算符,它不需要转换并允许您直接使用字符串文字。这可能是有利的,因为它可以使您免于 Qstring 可能执行的动态内存分配。


另一个问题是您真的应该通过引用来接收 CLogger 实例。通过指针获取它会阻止您为内置类型重载运算符,因为指针是内置类型并且您不能重载其运算符。

关于c++ - 如何将文字传递给重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232677/

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