如何区分 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),但这些已经过时了几十年。