从 const char[] 到带有构造函数的类从字符串的转换

代尔

我尝试将字符串传递给函数而不是 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;
}

我不想将字符串对象传递给testlike 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章