我有一个像这样的日志生成器类型:
Log Log::log(const int logLevel)
{
return Log(logLevel);
}
Log& operator <<(Log& log, const char * s)
{
if (log.hasLogLevel())
log.out << s;
return log;
}
我正在使用上面的代码,如下所示:
Log::log(1) << "Hello logger";
但是我收到了这些警告,直到最近我才意识到这是因为操作员超载的方式(或者至少这是我的想法)
warning C4239: nonstandard extension used : 'argument' : conversion from 'snow::Log' to 'snow::Log &'
我认为这会很好,因为它是一样的rvalue
?通过这些运算符重载传递/链接。我不认为这段代码在 MSVC++ 之外编译,我想知道我应该在这里做些什么不同的事情。
如果解决方案是简单地使用右值引用,那么我对此很满意,但我想更好地理解这里发生了什么。