考慮下面的例子踢:隱式轉換操作符不符合操作符重載
#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
相同。
它只是一個隱式轉換級別,所以它應該被執行並且應該被考慮到,否?
對不起,但我看不到工作代碼。什麼是's'? – gsamaras
@gsamaras http://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s – Holt
Right @Holt,謝謝! – gsamaras