我的节目中有一个奇怪的beaviour。 我写了一个总是失败的测试。 在调试时我看到了一些我不理解的东西:
我有一些多个构造函数,但是如果我通过_T()传递unicode,那么总会调用它:
IsNullable(bool isNullable)
: m_bIsNullabe(isNullable), Flag(eNullAllowed)
{};
这是我调用构造函数的方式:
... = new IsNullable(_T("N"));
奇怪的是上面的bool构造函数总是被调用...
为什么会这样?如果有人知道,我会很高兴的!
贪欲却无止境, 克莱门
编辑:
应该调用此构造函数:
IsNullable(wchar_t isNullable)
: Flag(eNullAllowed)
{...};
答案 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}}