作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为特殊类型的登录应用程序重载了运算符:
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 &str
。 const&
可以绑定(bind)到一个临时的,它允许将 "Hello"
转换为一个临时的 Qsting
然后你可以绑定(bind)到那个临时的。
另一种选择是为 const char*
重载运算符,它不需要转换并允许您直接使用字符串文字。这可能是有利的,因为它可以使您免于 Qstring
可能执行的动态内存分配。
另一个问题是您真的应该通过引用来接收 CLogger
实例。通过指针获取它会阻止您为内置类型重载运算符,因为指针是内置类型并且您不能重载其运算符。
关于c++ - 如何将文字传递给重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232677/
我是一名优秀的程序员,十分优秀!