我正在 MS Visual C++ 6.0 下编写程序(是的,我知道它很古老,不,我无法升级)。我看到一些我认为非常奇怪的行为。我有一个类,其中定义了两个构造函数,如下所示:
class MyClass
{
public:
explicit MyClass(bool bAbsolute = true, bool bLocation = false) : m_bAbsolute(bAbsolute), m_bLocation(bLocation) { ; }
MyClass(const RWCString& strPath, bool bLocation = false);
private:
bool m_bAbsolute;
bool m_bLocation;
};
当我使用以下语法实例化此类的实例时:MyClass("blah")
,它调用第一个构造函数。如您所见,我在其中添加了explicit
关键字,希望它不会那样做……没有骰子。它似乎更喜欢从const char *
to的转换而不是 tobool
的转换RWCString
,后者有一个带有const char *
. 为什么这样做?我会假设给定这样的两种可能的选择,它会说它是模棱两可的。我能做些什么来防止它这样做?如果可能的话,我想避免将strPath
参数显式转换为 a RWCString
,因为它将大量与文字一起使用,并且需要大量额外的输入(加上一个非常容易犯的错误)。