如何区分 char 文字和 unsigned int 作为构造函数的参数
How to differentiate between char literal and unsigned int as a parameter for a constructor
我的代码有 2 个不同的构造函数,一个只有一个 unsigned 作为参数,另一个有一个 char 和一个 unsigned,其中 unsigned 有一个默认值。
Myclass::Myclass(unsigned);
Myclass::Myclass(const char, unsigned = 1);
问题是当我尝试以下操作时:
Myclass a = 'A';
调用了只有无符号参数的构造函数(在本例中为 65)
在这种情况下如何调用第二个构造函数?
我也不希望 0-255 的值仅被解释为 Ascii 值。
编辑:
显示错误的示例代码:
Header:
#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_ */
Class body:
#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;
}
在控制台中显示 "unsigned"。
构造 unsigned
构造函数 explicit
,类似于:
Myclass {
explicit Myclass (unsigned);
// ...
}
我无法复制您提出的问题。我使用以下测试代码进行了快速检查:
#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
),但这些已经过时了几十年。
我的代码有 2 个不同的构造函数,一个只有一个 unsigned 作为参数,另一个有一个 char 和一个 unsigned,其中 unsigned 有一个默认值。
Myclass::Myclass(unsigned);
Myclass::Myclass(const char, unsigned = 1);
问题是当我尝试以下操作时:
Myclass a = 'A';
调用了只有无符号参数的构造函数(在本例中为 65)
在这种情况下如何调用第二个构造函数? 我也不希望 0-255 的值仅被解释为 Ascii 值。
编辑:
显示错误的示例代码:
Header:
#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_ */
Class body:
#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;
}
在控制台中显示 "unsigned"。
构造 unsigned
构造函数 explicit
,类似于:
Myclass {
explicit Myclass (unsigned);
// ...
}
我无法复制您提出的问题。我使用以下测试代码进行了快速检查:
#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
),但这些已经过时了几十年。