My Code有两个不同的构造函数,一个只有一个unsigned作为参数,另一个带有char和unsigned,其中unsigned有一个默认值。
Myclass::Myclass(unsigned);
Myclass::Myclass(const char, unsigned = 1);
问题在于,当我尝试以下操作时:
Myclass a = 'A';
调用仅带有unsigned as参数的构造函数(在此示例中为65)
在这种情况下如何调用第二个构造函数? 我也不希望0-255的值仅被解释为Ascii值。
编辑:
显示错误的示例代码:
部首:
#ifndef Myclass_H_
#define Myclass_H_
class Myclass {
public:
Myclass(unsigned int = 10);
Myclass(const char*);
Myclass(char , unsigned int= 10);
Myclass(const Myclass&);
virtual ~Myclass();
};
#endif /* Myclass_H_ */
班级团体:
#include "Myclass.h"
#include <iostream>
using namespace std;
Myclass::Myclass(unsigned int)
{
cout << "unsigned" << endl;
}
Myclass::Myclass(const char*)
{
cout << "pointer" << endl;
}
Myclass::Myclass(char , unsigned int)
{
cout << "char" << endl;
}
Myclass::Myclass(const Myclass&)
{
cout << "copy" << endl;
}
Myclass::~Myclass(){}
int main()
{
Myclass a = 'A';
return 0;
}
显示&#34; unsigned&#34;在控制台中。
答案 0 :(得分:2)
我无法复制您声明的问题。我用以下测试代码快速检查了一下:
#include <iostream>
struct foo {
foo(const char, unsigned = 1) { std::cout << "Foo(char, unsigned)"; }
foo(unsigned) {
std::cout << "Foo(unsigned)";
}
};
int main() {
foo f = 'A';
}
...使用我编写的编译器(VC ++ 2013,VC ++ 2015,g ++ 4.8,g ++ 5.2),foo(char, unsigned)
始终是所选择的(这是我所期望的)。
您使用哪种编译器为此输入选择其他重载?我希望这可以来自真正古老的编译器(遵循C规则,其中字符文字具有类型int
而不是类型char
),但这些已经过时了几十年。
答案 1 :(得分:1)
制作unsigned
构造函数explicit
,类似于:
Myclass {
explicit Myclass (unsigned);
// ...
}