https://godbolt.org/g/kNlYxl爲什麼VC++編譯這段代碼,同時鏘不會
鏘版本:X86-64鐺3.9.1
VC++版本:X86-64 CL 19 RC
我會期望它會因爲const char *可以隱式轉換爲A,而A可以轉換爲B.有趣的是clang指出const char [5]不能轉換爲A?注意:我現在明白了它的非標準行爲,但我仍然想知道VC++接受此代碼的原因,即哪種語言擴展引起了這種情況?由給定的鐺
錯誤:
no viable conversion from 'const char [5]' to 'B'
提示由鐺給出:
note: candidate constructor not viable: no known conversion from 'const char [5]' to 'A' for 1st argument
note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const char [5]' to 'const B &' for 1st argument
#include <string>
#include <vector>
struct A
{
std::string m_test;
A(const char* test)
: m_test(test)
{
}
};
struct B
{
A m_a;
B(A a)
: m_a(a)
{
}
};
int main()
{
B test = "test";
}
如果你想詢問這個錯誤,你需要發佈代碼來重現這個錯誤,「從const char [5]'沒有已知的轉換爲'第一個參數''。這段代碼沒有。 –
您只能得到*一個*用戶定義的轉換,並且您的代碼要求*兩個*:一個從'「test」到'A',另一個從'A'到'B'。 –
@nm用clang 3.9.1來看看上面的godbolt例子,並看看clang所顯示的提示。 – cageman