私は次のようなログビルダータイプを持っています:
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++ 以外でコンパイルされるとは思わないので、ここで何をすべきかを知りたいです。
解決策が単に右辺値参照を使用することである場合、私はそれで大丈夫ですが、ここで何が起こっているのかをもう少しよく理解したいと思います.