此代碼失敗,但我認爲選擇的轉換函數應該是operator std::string()
,因爲它的步驟(Foo -> std::string
)比operator const char*()
(Foo -> const char* -> std::string
)要少。爲什麼這個用戶定義的轉換失敗?
struct Foo
{
operator const char*();
operator std::string();
};
void f(Foo foo)
{
std::string s2(foo); // Error!
}
標準說這種轉換僅限於一個轉換序列,以及轉換應用於他們明確只在,那麼,爲什麼這些失敗?
的錯誤是:
error: call to constructor of 'std::string' (aka 'basic_string<char>') is ambiguous
std::string s2(foo);
^~~~
note: candidate constructor
basic_string(basic_string&& __str)
^
note: candidate constructor
basic_string(const basic_string& __str);
^
note: candidate constructor
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
^
1 error generated.
@remyabel但是,如果我做'的std :: string S2 = foo' ... –
@Template哎呀,我是編譯錯誤的代碼它的工作原理。 –