を演算子オーバーロードでキックしていない次の例を考えてみましょう:暗黙の変換演算子は、
#include <string>
#include <sstream>
struct Location {
unsigned line;
template<typename CharT, typename Traits>
operator std::basic_string<CharT, Traits>() const {
std::basic_ostringstream<CharT, Traits> ss;
ss << line;
return ss.str();
}
};
int main()
{
using namespace std::string_literals;
Location loc{42};
std::string s1 = "Line: "s.append(loc) + "\n"s; // fine
//std::string s2 = "Line: "s + loc + "\n"s; // error
}
コメント行は、コンパイルエラーが発生します。no match for 'operator+'
。どうして?私の最初の考えは、operator std::string
を変換してからoperator+
への呼び出しを実行することでした。これは.append
と同じ方法です。
暗黙の変換のレベルは1つのみであるため、実行する必要があります。
ご迷惑をおかけして申し訳ありませんが、私は作業コードを取得するために表示されません。 's'とは何ですか? – gsamaras
@gsamaras http://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s – Holt
右@Holt、ありがとう! – gsamaras