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

How pass literal to overloaded operator

本文关键字:重载 运算符 文本      更新时间:2023-10-16

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

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因此无法绑定到它。 你想做的是采取const QString &str. const&可以绑定到允许将"Hello"转换为临时Qsting的临时然后可以绑定到该临时。

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


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