我尝试将字符串传递给函数而不是 class 的对象A
,但出现错误。为什么它不工作,我怎样才能让它工作?
#include <string>
class A {
public:
A(const std::string &str) {
}
};
void test(const A &a) {
}
int main()
{
A a("abc"); //it's ok
test(a); //it's ok
test("abc"); //error?
return 0;
}
我不想将字符串对象传递给test
like test(std::string("abc"))
。我需要从 const char[] 转换它
在一种类型到另一种类型的隐式转换序列中,有一条规则规定:最多只能应用一个用户定义的转换。在
test("abc");
您需要两个用户定义的转换。首先,你需要转换,从const char[N]
到std::string
,这被认为是定义转换用户1。然后您需要将其转换std::string
为 a A
,这将是第二个用户定义的转换。这就是你得到错误的原因
要修复,您可以使用
test(A("abc"));
//or
test(std::string("abc"));
现在您有一个显式的用户定义转换和一个隐式转换,满足一个隐式转换规则。
您还可以提供一个A
接受 a的构造函数,const char*
以便您可以直接从 转换"abc"
为A
。
1:即使std::string
是标准库的一部分,它也不是“内置”类型,而是库类型。这意味着它被视为用户定义的类型,即使它随您的实现一起提供。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句