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