考虑下面的例子踢:隐式转换操作符不符合操作符重载
#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