【发布时间】:2019-10-04 15:10:05
【问题描述】:
我正在尝试支持类型系统中文字值的隐式转换。这些隐式转换是有意的和理想的(见注 1)。我知道 C++ 可以在一个表达式中执行多个隐式转换。下面main的第二行不行。
class A {
public:
A(const std::string&);
};
class B {
public:
B(const A&);
};
int main(void)
{
A("example"); // this works
B("example"); // this does not work
}
如果我在 A 中添加一个 const char* 构造函数,则第二行有效...
class A {
public:
A(const char*);
A(const std::string&);
};
class B {
public:
B(const A&);
};
int main(void)
{
A("example"); // this works
B("example"); // now it works
}
为什么第一个实现不起作用?第二行可以将const char*构造成std::string,然后构造成A,最后构造成B。
注1:隐式可转换类型的值是相同的值,该类型仅表示该值已通过前置条件,通过操作保持其条件,并通过对相似类型的操作传播该条件。隐式转换允许将类型转换为具有较弱前置条件的其他类型。
【问题讨论】:
-
不存在隐式转换。问题是关于隐式转换。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。