带有bool参数的构造函数总是被_T(“...”)调用?

时间:2012-12-11 15:14:34

标签: c++ unicode constructor

我的节目中有一个奇怪的beaviour。 我写了一个总是失败的测试。 在调试时我看到了一些我不理解的东西:

我有一些多个构造函数,但是如果我通过_T()传递unicode,那么总会调用它:

IsNullable(bool isNullable)
    : m_bIsNullabe(isNullable), Flag(eNullAllowed)
{};

这是我调用构造函数的方式:

... = new IsNullable(_T("N"));

奇怪的是上面的bool构造函数总是被调用...
为什么会这样?如果有人知道,我会很高兴的!

贪欲却无止境, 克莱门

编辑:

应该调用此构造函数:

IsNullable(wchar_t isNullable)
    : Flag(eNullAllowed)
{...};

2 个答案:

答案 0 :(得分:4)

要调用的构造函数采用wchar_t字符,而不是指向宽字符串的指针。称之为:

IsNullable( L'N' );

请注意,我没有使用_T宏,因为您的构造函数参数类型为wchar_t,并且不基于是否定义了UNICODE符号。所以在这种情况下不需要那个宏。

调用其他构造函数的原因是因为类型为const wchar_t[2]的字符串文字(假设_T宏扩展为L"N"),衰减为const wchar_t *然后将其隐式转换为bool

答案 1 :(得分:1)

_T("N")不是wchar_t,而是一个宽字符串文字,实际上是一个指针。没有从wchar_t转换为bool,但转换为new IsNullable(_T('N')) 。也许你的意思是

{{1}}