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

时间:2017-04-05 13:29:22

标签: c++ qt

我为应用程序中的特殊类型的日志记录重载了运算符:

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;

如何直接传递此字符串文字?

1 个答案:

答案 0 :(得分:3)

您的问题是您的运营商需要QString &str,这是一个左值参考。左值引用要求您将左值(命名对象)传递给它。所以在

&myLog  << "Hello";

"Hello"不是名为Qstring的,因此您无法绑定它。你想要做的是采取const QString &strconst&可以绑定到临时表,允许"Hello"转换为临时Qsting,然后您可以绑定到该临时表。

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

另一个问题是你应该通过引用真正接受CLogger实例。通过指针获取它可以阻止你为内置类型重载操作符,因为指针是内置类型,你不能重载它的操作符。