【发布时间】:2010-10-14 09:43:20
【问题描述】:
我正在 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 * 到bool 的转换,而不是到RWCString 的转换,后者有一个带有const char * 的复制构造函数。为什么这样做?我会假设给定这样的两种可能的选择,它会说它是模棱两可的。我能做些什么来防止它这样做?如果可能的话,我想避免将strPath 参数显式转换为RWCString,因为它将大量与文字一起使用,而且需要大量额外的输入(加上一个非常容易错误制作)。
【问题讨论】:
标签: c++ constructor arguments visual-c++-6