当前位置:  开发笔记 > 编程语言 > 正文

调用函数时首选错误的参数转换

如何解决《调用函数时首选错误的参数转换》经验,为你挑选了2个好方法。

我正在用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参数转换为a RWCString,因为它将与文字一起使用很多,并且这是一个额外的输入(加上一个非常容易犯的错误).



1> Andrew Grant..:

显式在这里没有帮助,因为构造函数不是隐式转换的一部分,只是接收者.

没有办法控制首选的转换顺序,但你可以添加第二个带有const char*的构造函数.例如:

class MyClass
{
public:
    MyClass(bool bAbsolute = true, bool bLocation = false);
    MyClass(const RWCString& strPath, bool bLocation = false);
    MyClass(const char* strPath, bool bLocation = false);

private:
    bool m_bAbsolute;
    bool m_bLocation;
};



2> Johannes Sch..:

Andrew Grant提供了解决方案.我想告诉你为什么它不会像你尝试的那样工作.如果你有两个可行的参数函数,那么调用与参数匹配最好的函数.第二个需要用户定义的转换,而第一个只需要标准转换.这就是为什么编译器首选第一个.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有