C++ 双重转换可以解决这个问题,但C++;,正确的?
我有这样的东西C++ 双重转换可以解决这个问题,但C++;,正确的?,c++,C++,我有这样的东西 void f(dclass b); class dclass { dclass(string s); }; f("s"); 这似乎不起作用。原则上,它可以使用双重转换:char*->string->dclass 所以C++中没有这样的东西。或者有些编译器支持它。。。您知道一种可能的语言吗?一个链中可以有多个转换,但是链中最多可以有一个用户定义的转换。在这种情况下,const char*->std::string和std::string->dclass都是用户定义的转
void f(dclass b);
class dclass
{
dclass(string s);
};
f("s");
这似乎不起作用。原则上,它可以使用双重转换:char*->string->dclass
<>所以C++中没有这样的东西。或者有些编译器支持它。。。您知道一种可能的语言吗?一个链中可以有多个转换,但是链中最多可以有一个用户定义的转换。在这种情况下,
const char*
->std::string
和std::string
->dclass
都是用户定义的转换。要解决这个问题,您需要添加一个隐式构造函数,该构造函数接受常量char*
。当然,如果您考虑了隐式构造函数的所有不希望的影响
class dclass
{
dclass(string s);
dclass(const char* ps);
};
这是可能的,但这在重载语言中是行不通的。将O(N)重载解析转换为O(N*M)重载解析。一般来说,重载被认为是比多次用户定义转换更有价值的语言功能。为了完整起见,您可以这样调用函数:
f(dclass("s"));
你认为这应该做什么?它实际上在做什么?为什么不写一个
dclass(constchar*)代码>?我想你可以说这在Java中是可能的,因为Java没有char*
,所有的字符串都是String
…是的,我做到了。。只是想知道你的想法。@Aftershock:N=重载的数量,M=用户定义类型的数量;重载解析必须查看所有这些,以查看是否有可用的双转换。Mike是对的。请注意,N和M都可能包含模板实例化(在C++中),这确实会使这项工作非常昂贵。